Essayez le module chardet Python, qui est disponible sur PyPI :
pip install chardet
Ensuite, exécutez chardetect myfile.txt
.
Chardet est basé sur le code de détection utilisé par Mozilla, il devrait donc donner des résultats raisonnables, à condition que le texte d'entrée soit suffisamment long pour une analyse statistique. Lisez la documentation du projet.
Comme mentionné dans les commentaires, il est assez lent, mais certaines distributions fournissent également la version C++ originale comme @Xavier l'a trouvé dans https://superuser.com/a/609056. Il existe aussi une version Java quelque part.
J'utiliserais cette commande simple :
encoding=$(file -bi myfile.txt)
Ou si vous voulez juste le jeu de caractères réel (comme utf-8
):
encoding=$(file -b --mime-encoding myfile.txt)
Sur Linux basé sur Debian, le paquet uchardet (Debian/Ubuntu) fournit un outil de ligne de commande. Voir ci-dessous la description du package :
universal charset detection library - cli utility
.
uchardet is a C language binding of the original C++ implementation
of the universal charset detection library by Mozilla.
.
uchardet is a encoding detector library, which takes a sequence of
bytes in an unknown character encoding without any additional
information, and attempts to determine the encoding of the text.
.
The original code of universalchardet is available at
http://lxr.mozilla.org/seamonkey/source/extensions/universalchardet
.
Techniques used by universalchardet are described at
http://www.mozilla.org/projects/intl/UniversalCharsetDetection.html