Rechercher : dans
Par :

Python et Caractères accentués

Dernière réponse le 9 mar 2004 à 21:21:56 punchup, le 9 mar 2004 à 13:31:16 
 Signaler ce message aux modérateurs

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...

Meilleures réponses pour « Python et Caractères accentués » dans :
Utiliser des accents et autres caractères spéciaux VoirDans la plupart des langages de programmation, on ne peut utiliser directement les accents et autres caractères non-anglosaxon. La solution est l'unicode, une sorte de code universel. Par exemple pour afficher la chaine de caractères : " là, ça...
Caractère accolade sous Mac VoirIl n'y a pas le caractère accolade { } sur le clavier Mac... Bien embêtant pour le développement entre autre. Néanmoins, il est possible de saisir ce caractère en utilisant la combinaison suivante : Pour { : Alt + ( Pour } : Alt + )
Renommer plusieurs fichiers en batch VoirLe fait de renommer un grand nombre de fichiers peut très vite devenir fastidieux. Heureusement, il existe des outils permettant d'automatiser cette tâche dans un grand nombre de cas : Fonctionnalités natives Utilisation d'un programme...
Caractères spéciaux HTML VoirCodage des caractères spéciaux Le standard HTML demande de respecter le codage des caractères ASCII 7 bits, c'est-à-dire que les caractères accentués ne sont pas autorisés. Il faut pour cela utiliser un codage particulier. Pour...
Javascript - Implantation du code VoirA quel emplacement insérer le Javascript dans votre page HTML Il existe plusieurs façons d'inclure du JavaScript dans une page HTML : Grâce à la balise En mettant le code dans un fichier Grâce aux événements Dans la balise...

1

sebsauvage, le 9 mar 2004 à 17:15:59
  • +2

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():

>>> 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).

Répondre à sebsauvage

2

 punchup, le 9 mar 2004 à 21:21:56

Merci, merci beaucoup...

Répondre à punchup