2010-10-31 7 views
0

J'essaie de travailler avec plusieurs documents qui ont tous des codages différents - certains utf-8, certains ISO-8859-2, certains ascii, etc. Y at-il un moyen fiable de décoder à un encodage standard pour le traitement?comment décoder de manière fiable divers encodages à l'encodage par défaut du système

J'ai essayé ce qui suit:

import chardet 
encoding = chardet.detect(text) 
text = unicode(text,encoding['encoding']).decode(sys.getdefaultencoding(),'ignore') 

Avec le code ci-dessus je reçois encore des erreurs UnicodeEncodeError

+0

Vous pouvez également jeter un coup d'œil sur [that] (http: // stackoverflow .com/questions/368805 /) question. – tzot

Répondre

3

Utilisez decode pour convertir octets unicode et encode pour convertir unicode octets:

text.decode(encoding['encoding'], 'ignore').encode(sys.getdefaultencoding(), 'ignore') 

Bien que je vous recommande de faire votre traitement sur les objets Unicode eux-mêmes, ou des chaînes codées UTF-8 si vous absolument besoin de travailler avec des octets. sys.getdefaultencoding() est 'ascii', ce qui fournit un jeu de caractères très limité. Voir aussi: http://wiki.python.org/moin/DefaultEncoding

0

Vous voulez dire probablement encode:

u = unicode(text, encoding['encoding'], 'ignore') 
text = u.encode(sys.getdefaultencoding(), 'ignore') 

ou de manière équivalente et plus généralement,

u = text.decode(encoding['encoding'], 'ignore') 
text = u.encode(sys.getdefaultencoding(), 'ignore') 

Vous pouvez ignore sur les deux, comme ci-dessus: le texte entrant peut avoir des caractères non valides dans celui-ci, provoquant son échec à décoder en Unicode, et il peut avoir des caractères qui ne peuvent pas être représentés dans l'encodage par défaut, l'empêchant d'encoder. (Vous ne voulez peut-être pas vraiment ignorer les erreurs, car il semble que vous essayiez simplement de contourner la mauvaise fonction.)