87 votes

Comment détecter automatiquement l'encodage d'un fichier texte ?

Il existe de nombreux fichiers de texte brut qui ont été encodés dans des jeux de caractères différents.

Je veux les convertir tous en UTF-8, mais avant d'exécuter iconv, je dois connaître son encodage d'origine. La plupart des navigateurs ont un Auto Detect dans les encodages, cependant, je ne peux pas vérifier ces fichiers texte un par un car ils sont trop nombreux.

Seulement en connaissant l'encodage original, je peux alors convertir les textes en iconv -f DETECTED_CHARSET -t utf-8 .

Existe-t-il un utilitaire permettant de détecter l'encodage des fichiers de texte brut ? Il n'est pas nécessaire qu'il soit parfait à 100%, cela ne me dérange pas s'il y a 100 fichiers mal codés dans 1 000 000 de fichiers.

2voto

Yves Lhuillier Points 21

Pour ceux qui utilisent régulièrement Emacs, ils pourraient trouver utile ce qui suit (permet d'inspecter et de valider manuellement la transfomation).

De plus, je trouve souvent que l'auto-détection du jeu de caractères d'Emacs est beaucoup plus efficace que les autres outils d'auto-détection du jeu de caractères (comme chardet).

(setq paths (mapcar 'file-truename '(
 "path/to/file1"
 "path/to/file2"
 "path/to/file3"
)))

(dolist (path paths)
  (find-file path)
  (set-buffer-file-coding-system 'utf-8-unix)
  )

Ensuite, un simple appel à Emacs avec ce script comme argument (voir l'option "-l") fait le travail.

1voto

Rimsky Points 75

UTFCast vaut la peine d'être essayé. Ça n'a pas marché 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/

1voto

estani Points 716

Pour en revenir à chardet (Python 2. ?) cet appel pourrait suffire :

python -c 'import chardet,sys; print chardet.detect(sys.stdin.read())' < file
{'confidence': 0.98999999999999999, 'encoding': 'utf-8'}

Bien que ce soit loin d'être parfait....

echo "öasd" | iconv -t ISO-8859-1 | python -c 'import chardet,sys; print chardet.detect(sys.stdin.read())'
{'confidence': 0.5, 'encoding': 'windows-1252'}

1voto

Ronan Points 209

isutf8 (de la moreutils ) a fait le travail

1voto

Falaen Points 151

Si vous n'êtes pas satisfait de chardet comme je le fais parce qu'il ne reconnaît pas correctement certains encodages, essayez de détecter le codage de fichiers et la langue . J'ai trouvé qu'il était beaucoup plus fiable que le chardet .

1. Assurez-vous que vous avez Node.js et NPM installés. Vous pouvez les installer comme ceci :

$ sudo apt install nodejs npm

2. Installez détecter le codage de fichiers et la langue :

$ npm install -g detect-file-encoding-and-language

3. Vous pouvez maintenant l'utiliser pour détecter l'encodage :

$ dfeal "/home/user name/Documents/subtitle file.srt"

Il retournera un objet avec l'encodage détecté, la langue, et un score de confiance.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X