Question

J'ai une collection de fichiers encodés en ANSI ou UTF-16LE. Je voudrais que python ouvre les fichiers en utilisant le bon encodage. Le problème est que les fichiers ANSI ne soulèvent aucune sorte d’exception lorsqu’ils sont codés avec UTF-16le et vice-versa.

Existe-t-il un moyen simple d’ouvrir les fichiers en utilisant le bon encodage?

Était-ce utile?

La solution

Utilisez la bibliothèque chardet pour détecter l'encodage.

Autres conseils

Vous pouvez vérifier la nomenclature au début de le fichier pour vérifier si c'est UTF.

Ensuite, unicode.decode en conséquence (à l'aide de l'un des < a href = "http://docs.python.org/library/codecs.html#standard-encodings" rel = "nofollow noreferrer"> encodages standard ).

MODIFIER Ou, peut-être, essayez de coder ('ascii') votre chaîne (s est le nom de la variable). S'il renvoie UnicodeDecodeError, décodez-le en tant que "utf_16_le".

Que contiennent les fichiers? S'il s'agit de texte brut dans un alphabet latin, les fichiers UTF-16LE auront presque tous les octets nuls. Dans les fichiers Windows-1252, par contre, je ne m'attendrais pas à voir des zéros du tout. Par exemple, voici “Hello” dans Windows 1252:

93 48 65 6C 6C 6F 94

... et dans UTF-16LE:

1C 20 48 00 65 00 6C 00 6C 00 6F 00 1D 20

Hormis les guillemets bouclés, chaque caractère correspond à la même valeur, avec l'ajout d'un octet zéro final. En fait, cela est vrai pour chaque caractère du jeu de caractères ISO-8859-1 (windows-1252 étend ISO-8859-1 pour ajouter des mappages à plusieurs caractères d'impression, tels que des guillemets bouclés, afin de remplacer les caractères de contrôle de la plage 0x80..0x9F ).

Si vous savez que tous les fichiers sont soit Windows-1252, soit UTF-16LE, une analyse rapide des zéros devrait suffire à déterminer lequel est lequel. Il y a une bonne raison pour laquelle chardet est si lent et complexe, mais dans ce cas, je pense que vous pouvez vous en sortir avec rapide et sale.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top