Prova il modulo Python chardet, disponibile su PyPI:
pip install chardet
Quindi esegui chardetect myfile.txt
.
Chardet si basa sul codice di rilevamento utilizzato da Mozilla, quindi dovrebbe fornire risultati ragionevoli, a condizione che il testo di input sia sufficientemente lungo per l'analisi statistica. Leggi la documentazione del progetto.
Come accennato nei commenti, è piuttosto lento, ma alcune distribuzioni forniscono anche la versione C++ originale come @Xavier ha trovato in https://superuser.com/a/609056. C'è anche una versione Java da qualche parte.
Userei questo semplice comando:
encoding=$(file -bi myfile.txt)
O se vuoi solo il set di caratteri effettivo (come utf-8
):
encoding=$(file -b --mime-encoding myfile.txt)
Su Linux basato su Debian, il pacchetto uchardet (Debian / Ubuntu) fornisce uno strumento a riga di comando. Vedi sotto la descrizione del pacchetto:
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