Bonjour je suis débutant sous python et essaye de fixer le charset d'un script à UTF-8 sous linux mais rien n'y fait.
Pour le script :
j'obtiens : é@ÃCode:
1
2
3
4
5 #!/usr/bin/python # -*- coding: UTF-8 -*- print "é@à#"
Quel est le problème ?
Version imprimable
Bonjour je suis débutant sous python et essaye de fixer le charset d'un script à UTF-8 sous linux mais rien n'y fait.
Pour le script :
j'obtiens : é@ÃCode:
1
2
3
4
5 #!/usr/bin/python # -*- coding: UTF-8 -*- print "é@à#"
Quel est le problème ?
Ma question est mal posée, après lecture de quelques tutos...
En fait je voudrais pouvoir sortir un string avec caractères accentués correctement sans code UTF ou diacritics ?
Comment faire ?
C'est peut-être ton terminal qui n'est pas en UTF-8
Code:
1
2 import sys print sys.stdout.encoding
Moins probable.
L'interpréteur affiche é pour é, donc il décode de l'utf-8 en latin-1 ou encodage similaire. La source est apparemment bien en utf-8, c'est le terminal qui ne l'est pas.
print sys.stdout.encoding
>> UTF-8
C'est probablement vim, alors ?
alors c'est une problème de charset linux ?
vi /etc/sysconfig/console
vi /etc/sysconfig/languageCode:
1
2CONSOLE_ENCODING="UTF-8"
vi /etc/bash.bashrc.localCode:
1
2RC_LANG="fr_FR.UTF-8"
Je dois peut-etre rebooterCode:
1
2
3
4 export LANG="fr_FR.UTF-8" export LC_MESSAGES=POSIX export LC_CTYPE="fr_FR.UTF-8"
... aucun changement
Es-tu en tty ou en terminal sous X?
en tty je crois avec putty ou cygwin
Tu utilises putty ou cygwin? Tu accèdes à un shell à distance ou bien tu utilises linux par dessus ton windows?
Remarque: ton problème de codage de caractères n'est pas lié à Python, donc à ce stade là, c'est hors sujet.
j'ai le problème avec les deux. Je n'ai pas encore directement testé à la console de linux...
Salut,
Je me suis moi-même pas mal pris la tête ces derniers jours avec des soucis d'encodages et à mon avis ça se passe moins dans l'éditeur que dans le codage utilisé pour ta page.
Je te conseille la lecture de cette page, très instructive : http://sebsauvage.net/python/charsets_et_encoding.html
Ensuite, dans ton cas, je verrais deux solutions.
Soit tu changes le codage pour ton script python en spécifiant latin-1 aulieu de utf-8. Dans ce cas, lorsque tu utilises un print, il lui sera possible d'afficher le caractère. Ton script bug car tu spécifies un encodage utf-8 et essaie d'afficher des caractères latin-1.
Maintenant, tu souhaites peut-être garder le codage utf-8 pour ton script. Il te faut donc passer de l'utf-8 au latin-1. On utilise les fonctions encode et decode en passant en paramètre le type d'encodage. Ca donne quelque chose comme :Code:
1
2
3 # -*- coding: latin-1 -*- print "é@à" # Affiche : é@à
Au passage, la fonction repr est très utile pour te permettre d'afficher tout de même tes caractères, sans faire planter le print. Tu verras le codage de tes caractères ça peut aider ^^Code:
1
2
3
4
5
6 # -*- coding: utf-8 -*- print "é@à" # Affiche : é@à # Pour un affichage correct, on décode la chaine codée en utf-8, puis on # encode le résultat en latin-1 pour permettre l'affichage des accents, entre # autres print "é@à".decode('utf-8').encode('latin-1') # Affiche : é@à
Code:
1
2
3
4 # -*- coding: utf-8 -*- # Affiche : u'\xe9@\xe0', c'est-à-dire la représentation de é et à # en utf-8 print repr ("é@à".decode('utf-8') )
merci pour ton post
j'ai réussi à sortir ma chaine avec decodage et réencodage