Il existe de nombreux fichiers texte qui ont été codés dans des jeux de caractères variantes.
Je veux tous les convertir en UTF-8, mais avant d'exécuter iconv, j'ai besoin de connaître son encodage d'origine. La plupart des navigateurs ont une Auto Detect
option dans les encodages, cependant, je ne peux pas vérifier ces fichiers texte un par un car ils sont trop nombreux.
N'ayant connu que l'encodage d'origine, je peux alors convertir les textes par iconv -f DETECTED_CHARSET -t utf-8
.
Existe-t-il un utilitaire permettant de détecter le codage de fichiers en texte brut? Il NE DOIT PAS être parfait à 100%, cela ne me dérange pas qu'il y ait 100 fichiers mal convertis en 1 000 000 de fichiers.
python-chardet
dans le repo de l'univers Ubuntu.chardet
nous donnerons toujours la meilleure hypothèse, comme./a.txt: GB2312 (confidence: 0.99)
. Comparé à Enca, qui vient d’échouer et qui signale un «encodage non reconnu». Malheureusement, celachardet
fonctionne très lentement.chardet <(head -c4000 filename.txt)
été beaucoup plus rapide et tout aussi réussie pour mon cas d'utilisation. (au cas où ce ne serait pas clair, cette syntaxe bash n'enverra que les 4000 premiers octets à chardet)chardet==3.0.4
, et le nom de l'exécutable réel de l'outil de ligne de commande n'estchardetect
paschardet
.Je voudrais utiliser cette commande simple:
Ou si vous voulez juste le jeu de caractères actuel (comme
utf-8
):la source
file
seuls les codages dotés de propriétés spécifiques, tels que UTF-8 ou UTF-16, sont détectés. Les autres, les anciens ISO8859 ou leurs correspondants MS-DOS et Windows, sont répertoriés comme "inconnu-8 bits" ou similaire, même pour les fichierschardet
détectés avec une confiance de 99%.Sous Linux basé sur Debian, le paquet uchardet ( Debian / Ubuntu ) fournit un outil de ligne de commande. Voir ci-dessous la description du paquet:
la source
uchardet
via Homebrew.iconv
.Pour Linux, il existe enca et pour Solaris, vous pouvez utiliser auto_ef .
la source
enca -d -L zh ./a.txt
échec avec le message./a.txt: Unrecognized encoding Failure reason: No clear winner.
Comme @grawity l’a mentionné,chardet
c’est plus laxiste, mais c’est pourtant trop lent.Mozilla a une base de code intéressante pour la détection automatique dans les pages Web:
http://lxr.mozilla.org/seamonkey/source/extensions/universalchardet/src/
Description détaillée de l'algorithme:
http://www-archive.mozilla.org/projects/intl/UniversalCharsetDetection.html
la source
Pour revenir à chardet (python 2.?), Cet appel pourrait suffire:
Bien que ce soit loin d'être parfait ....
la source
Pour ceux qui utilisent régulièrement Emacs, ils pourraient trouver ce qui suit utile (permet d’inspecter et de valider manuellement la transfomation).
De plus, je trouve souvent que la détection automatique des jeux de caractères Emacs est beaucoup plus efficace que les autres outils de détection automatique des jeux de caractères (tels que chardet).
Ensuite, un simple appel à Emacs avec ce script en argument (voir l’option "-l") fait le travail.
la source
UTFCast vaut la peine d'essayer. Cela n'a pas fonctionné pour moi (peut-être parce que mes fichiers sont terribles) mais ça a l'air bien.
http://www.addictivetips.com/windows-tips/how-to-batch-convert-text-files-to-utf-8-encoding/
la source
isutf8
(de l'moreutils
emballage) a fait le travailla source
Aussi au cas où vous classez -i vous donne inconnu
Vous pouvez utiliser cette commande php qui peut deviner un jeu de caractères comme ci-dessous:
En php, vous pouvez vérifier comme ci-dessous:
Spécifier explicitement la liste de codage:
" Mb_list_encodings " plus précis :
Ici, dans le premier exemple, vous pouvez voir que je mets une liste de codages (détection d’ordre de liste) pouvant correspondre. Pour obtenir un résultat plus précis, vous pouvez utiliser tous les encodages possibles via: mb_list_encodings ()
Remarque les fonctions mb_ * nécessitent php-mbstring
Voir la réponse: https://stackoverflow.com/a/57010566/3382822
la source