Python et Caractères accentués
punchup
Messages postés
3
Date d'inscription
Statut
Membre
Dernière intervention
-
punchup Messages postés 3 Date d'inscription Statut Membre Dernière intervention -
punchup Messages postés 3 Date d'inscription Statut Membre Dernière intervention -
La commande listdir me retourne une liste où les caractères accentués font des folies...
Comment faire docteur pour avoir mes caractères OK?
Exemple :
>>> from os import listdir
>>> toto=listdir("c:\p3")
>>> print toto
['f\xe9t\xea\xe0.mp3']
et non fétêà.mp3
Ds Idle (win98) le probleme est identique que sur osx.
La portion encoding ASCII de site.py a été transformée en mbcs :
"
# Set the string encoding used by the Unicode implementation. The
# default is 'ascii', but if you're willing to experiment, you can
# change this.
encoding = "mbcs" # Default value set by _PyUnicode_Init()
"
si l'on fait un write de toto le pb est identique.
Comment faire?
Merci à tous d'avance...
Comment faire docteur pour avoir mes caractères OK?
Exemple :
>>> from os import listdir
>>> toto=listdir("c:\p3")
>>> print toto
['f\xe9t\xea\xe0.mp3']
et non fétêà.mp3
Ds Idle (win98) le probleme est identique que sur osx.
La portion encoding ASCII de site.py a été transformée en mbcs :
"
# Set the string encoding used by the Unicode implementation. The
# default is 'ascii', but if you're willing to experiment, you can
# change this.
encoding = "mbcs" # Default value set by _PyUnicode_Init()
"
si l'on fait un write de toto le pb est identique.
Comment faire?
Merci à tous d'avance...
A voir également:
- Python et Caractères accentués
- Caractères ascii - Guide
- Caractères spéciaux - Guide
- Citizen code python avis - Accueil - Outils
- Caractères spéciaux mac - Guide
- Caracteres speciaux - Guide
1 réponse
Hello !
C'est normal.
Ta chaîne de caractères toto est en Unicode
(voir http://www.sebsauvage.net/comprendre/ascii/ ).
Ton terminal est en ASCII.
Python ne sait pas comment convertir les caractères Unicode en ASCII. C'est pour cela qu'il utilise \xe9 etc.
Tu peux lui donner un coup de pouce avec .encode():
"ê" ne fait pas partie du code ASCII ---> Python affiche \x88, ou fait une erreur quand tu fais un print.
Avec .encode('latin-1'), on demande à Python de convertir Unicode vers le code Latin-1 (ISO 8859-1 pour être précis).
C'est normal.
Ta chaîne de caractères toto est en Unicode
(voir http://www.sebsauvage.net/comprendre/ascii/ ).
Ton terminal est en ASCII.
Python ne sait pas comment convertir les caractères Unicode en ASCII. C'est pour cela qu'il utilise \xe9 etc.
Tu peux lui donner un coup de pouce avec .encode():
>>> toto=u'fête' # toto est une chaîne Unicode >>> toto u'f\x88te' >>> print toto Traceback (most recent call last): File "<stdin>", line 1, in ? File "c:\python23\lib\encodings\cp437.py", line 18, in encode return codecs.charmap_encode(input,errors,encoding_map) UnicodeEncodeError: 'charmap' codec can't encode character u'\x88' in position : character maps to <undefined> >>> print toto.encode('latin-1') fête
"ê" ne fait pas partie du code ASCII ---> Python affiche \x88, ou fait une erreur quand tu fais un print.
Avec .encode('latin-1'), on demande à Python de convertir Unicode vers le code Latin-1 (ISO 8859-1 pour être précis).
punchup
Messages postés
3
Date d'inscription
Statut
Membre
Dernière intervention
Merci, merci beaucoup...