2012-07-10 5 views
-1

J'ai lu dans certaines données d'un fichier texte danois. Mais je n'arrive pas à trouver un moyen de le décoder. Le texte original est « Dør », mais dans le texte brut fichier stocké sous forme de son « d√Πr »Python décodage des fichiers Uncode avec 'ÆØÅ'

donc j'ai essayé l'évidence

InputData = "d√∏r" 
Print InputData.decode('iso-8859-1') 

résultant tristement l'erreur suivante:

UnicodeEncodeError: 'ascii' codec can't encode characters in position 1-6: ordinal not in range(128) 

UTF-8 donne la même erreur. (en utilisant Python 2.6.5)

Comment puis-je décoder ce texte afin que le message imprimé soit "dør"?

+1

Quelle version de python? Aussi, vous devriez décoder comme utf-8 si c'est ce que c'est. – Ben

+0

La version 2 et utf-8 ne fonctionne pas. – Malu05

+0

2 n'est pas une version de python. – Ben

Répondre

0

C3 B8 est le codage UTF-8 pour "ø". Vous devez lire le fichier dans le codage UTF-8:

import codecs 
codecs.open(myfile, encoding='utf-8') 

La raison pour laquelle vous obtenez un UnicodeEncodeError est que vous essayez de sortie le texte et Python ne sait pas quel encodage de votre terminal est en, donc par défaut ascii. Pour résoudre ce problème, utilisez sys.stdout = codecs.getwriter('utf8')(sys.stdout) ou utilisez la variable d'environnement PYTHONIOENCODING="utf-8". Notez que cela vous donnera le texte unicode objets; Si tout le reste de votre programme est str alors vous allez rencontrer des problèmes de compatibilité. Convertissez tout en unicode ou (probablement plus facile) ré-encoder le fichier en Latin-1 en utilisant ustr.encode('iso-8859-1'), mais sachez que cela va se casser si quelque chose est en dehors de la page de codes Latin-1. Il pourrait être plus facile de convertir votre programme pour utiliser str en codage utf-8 en interne.

+0

essayé le codec.open mais a obtenu cette erreur UnicodeEncodeError: le codec 'ascii' ne peut pas encoder le caractère u '\ xf8' en position 70 – Malu05

+0

@ user1095570 voir ci-dessus. – ecatmur

+0

@ user1095570 oui, vous devrez être cohérent dans votre utilisation de 'unicode' et' str'. – ecatmur