Encodage des caractères [Résolu]

Signaler
Messages postés
179
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
21 mai 2014
-
Messages postés
179
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
21 mai 2014
-
J'aimerai que quelque'un fasse un peu de lumiere sur ce monde obscur de l'encodage des caratères.....



ex de code.



def ma fonction( self, repertoire ):

...

min = [ "Reçus", "Envoyés", "Poubelle" ]

self.__min = map( lambda str : os.path.join(repertoire, str), min )



Le truc bizarre le voila:

quand j'execute ce code au lancement de mon Appli wx, tout va bien....

par contre losrque je l'execute pendant que je parse un fichier XML
avec une classe héritée de xml.sax.ContentHandler, j'obtient une erreur
dans ntpath.py ( os.path.join ) :



path += "\" + b

UnicodeDecodeError: 'ascii' codec can't decode byte 0xe7 in position 3: ordinal not in range(128)



sachant que b vaut "Reçus" ( g mit un print juste avant le += dans ntpath.py ) et que path vaut "C:\temp\UFR"



Derniere précision, je n'utilise pas d'unicode. Et en plus l'erreur
stipule que le code est > 128. D'apres mes souvenirs l'ASCII
(etendu, j'ai fait un setlocale...)va jusqu'a 256...

Autrte petite précision le code suivant provoque la meme erreur....



chaine = u"ç"

print chaine



Alors des idées? moi je sèche
A voir également:

7 réponses

Messages postés
179
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
21 mai 2014
2
Python encode par déaut en ascii simple ( 128 caratères )

pour qu'il encode en iso-8859-1 ( latin-1 ) il suffit de mettre ces
deux lignes dans le fichier
<REP_PYTHON>\Lib\site-packages\sitecustomize.py

import sys
sys.setdefaultencoding('latin-1')

après le tour est joué!!!
plus de problème avec les caractères accentués.
voila , simplissimo!

ref = "http://www.pycs.net/users/0000323/stories/14.html"
Messages postés
74
Date d'inscription
dimanche 2 novembre 2003
Statut
Membre
Dernière intervention
6 septembre 2008
2
Super truc !!!!
ça marche nickel pour une fois !!!

Merci bcp !!!
Messages postés
179
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
21 mai 2014
2
Je crois que je doit etre le seul qui répond tout seul à ses questions...
Messages postés
179
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
21 mai 2014
2
enfin à ses propres questions.
Messages postés
102
Date d'inscription
jeudi 29 mai 2003
Statut
Membre
Dernière intervention
23 juin 2008
4
Je dois être con mais j'ai pas cette fonction dans le module sys...



ya la fonction : getdefaultencoding() qui me retourne 'ascii'

mais pas setdefaultencoding()...



c'est normal?

quel version de python tu as ?

moi la version 2.4.1



>>>sys.getdefaultencoding()

'ascii'

>>> sys.setdefaultencoding('latin-1')

Traceback (most recent call last):

File "", line 1, in ?

sys.setdefaultencoding('latin-1')

AttributeError: 'module' object has no attribute 'setdefaultencoding'
Messages postés
102
Date d'inscription
jeudi 29 mai 2003
Statut
Membre
Dernière intervention
23 juin 2008
4
en fait , il faut pas se poser de question,



il faut créer ce fichier sitecustomize.py et mettre dedans :

import sys
sys.setdefaultencoding('iso-8859-1')

ça fonctionne à merveille... que demander de plus :)

Pour info il faut savoir que le fichier sitecustomize.py est lancé à chaque démarrage de python
(si le fichier existe biensur)
donc pour executer un script systématique à chaque lancement de python,
il suffit de placer le code dans ce fichier :)
Messages postés
179
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
21 mai 2014
2
vi c'est normal moi aussi mais quand tu la met dans le fichier préciser
la fonction est acceptée, aussi étrange que cela puisse paraître!