Comment faire pour déterminer l'encodage de texte?
J'ai reçu le texte qui est codé, mais je ne sais pas quel jeu de caractères a été utilisé. Est-il un moyen de déterminer l'encodage d'un fichier texte à l'aide de Python? Comment puis-je détecter l'encodage/codepage d'un fichier texte traite avec C#.
Vous devez vous connecter pour publier un commentaire.
Correctement la détection de l'encodage de tous les temps est impossible.
(À partir de chardet FAQ:)
Il est le chardet bibliothèque qui utilise cette étude pour tenter de détecter l'encodage. chardet est un port de la détection automatique de code de Mozilla.
Vous pouvez également utiliser UnicodeDammit. Il va essayer les méthodes suivantes:
chardet
de référence. Semble bon, bien qu'un peu lent.chardet
a quelques très belles interface de ligne de commande, je ne suis pas sûr au sujet de votre cas d'utilisation, pour moi j'ai été vraiment juste essayer de deviner le jeu de caractères du fichier à la volée, et de ne pas l'utiliser dans un script ou quelque chose. l'utilisation de la CLI (aprèspip install chardet
)$ chardet filename
et vous pouvez utiliser l'aurez deviné codant pour encoder votre fichier texte dans d'autres options, en utilisant des outils commeiconv
.chardet
mais depuis le soutien turc a été ajouté asymétrique les nombres dans une manière que maintenant, il devine le turc pour beaucoup trop de fichiers, je suis venu à travers. Tant et si bien que je devais me débarrasser dechardet
.cchardet
est plus rapide, mais nécessitecython
.Une autre option pour l'encodage à utiliser
libmagic (qui est le code de l'
fichier de commande). Il y a une profusion de
liaisons python disponible.
Les bindings python qui vivent dans le fichier source de l'arbre sont disponibles comme
python-magie (ou python3-magie)
paquet debian. Il permet de déterminer l'encodage d'un fichier en faisant:
Il y a un nom identique, mais incompatibles, python-magie pip paquet sur pypi, qui utilise également
libmagic
. Il peut aussi faire de l'encodage, en faisant:libmagic
est en effet une alternative viable àchardet
. Et des informations utiles sur les paquets nommépython-magic
! Je suis sûr que cette ambiguïté piqûres de beaucoup de genssudo apt-get install python3-magic
pour python3file
n'est pas particulièrement bon pour identifier le langage humain dans des fichiers texte. Il est excellent pour identifier les différents formats de conteneur, bien que parfois vous devez savoir ce que veut dire ("Microsoft Office document" pourrait signifier un message Outlook, etc).open()
:UnicodeDecodeError: 'utf-8' codec can't decode byte 0xfc in position 169799: invalid start byte
. L'encodage du fichier en fonction de vim est:set fileencoding
estlatin1
.errors='ignore'
, la sortie de l'exemple de code est le moins utilebinary
.Certaines stratégies d'encodage, décommentez goût :
Vous pouvez vérifier l'encodage par l'ouverture et lecture du fichier dans un formulaire d'une boucle... mais vous pourriez avoir besoin pour vérifier la taille du fichier d'abord :
io
, commeio.open(filepath, 'r', encoding='utf-8')
, ce qui est plus pratique, parce quecodecs
ne pas convertir\n
automatiquement sur la lecture et l'écriture. Plus sur ICIVoici un exemple de la lecture et de la prise à une valeur nominale de un
chardet
codage de prédiction, la lecturen_lines
à partir du fichier dans le cas où il est de grande taille.chardet
vous donne également une probabilité (c'est à direconfidence
) de l'encodage de prédiction (n'ai pas regardé comment ils viennent avec cela), qui est retourné avec sa prédiction dechardet.predict()
, de sorte que vous pouvez travailler qui, en quelque sorte, si vous le souhaitez.def predict_encoding(file_path, n=20): ... skip ... and then rawdata = b''.join([f.read() for _ in range(n)])
Ont été essayé cette fonction sur Python 3.6, a parfaitement fonctionné avec "ascii", "cp1252", "utf-8", "unicode" encodages. Donc ce n'est certainement upvote.En fonction de votre plate-forme, je viens de choisir d'utiliser le shell linux
file
de commande. Cela fonctionne pour moi depuis que je suis à l'utiliser dans un script qui exécute exclusivement sur l'une de nos machines.Évidemment, ce n'est pas un idéal de solution ou de réponse, mais il pourrait être modifié pour s'adapter à vos besoins. Dans mon cas, j'ai juste besoin de déterminer si un fichier est en UTF-8 ou pas.
Il est, en principe, impossible de déterminer l'encodage d'un fichier texte, dans le cas général. Donc non, il n'y a pas de norme bibliothèque Python pour le faire pour vous.
Si vous avez des connaissances plus spécifiques sur le fichier texte (par exemple, qu'il est XML), il pourrait y avoir des fonctions de la bibliothèque.
Si vous connaissez le contenu de certains le fichier, vous pouvez essayer de le décoder avec plusieurs d'encodage et de voir qui est manquant. En général, il n'y a pas de chemin depuis un fichier texte est un fichier texte et ceux qui sont stupides 😉
Ce site a code python pour la reconnaissance de l'ascii, l'encodage avec les nomenclatures, et utf8 sans bom: https://unicodebook.readthedocs.io/guess_encoding.html. Lire le fichier dans le tableau d'octets (de données): http://www.codecodex.com/wiki/Read_a_file_into_a_byte_array. Voici un exemple. Je suis dans osx.