web-dev-qa-db-fra.com

Comment déterminer la table de codage d'un fichier texte

J'ai .txt et .Java fichiers et je ne sais pas comment déterminer la table de codage des fichiers (Unicode, UTF-8, ISO-8525,…). Existe-t-il un programme pour déterminer l'encodage du fichier ou pour voir l'encodage?

44
Ballon

Si vous êtes sous Linux, essayez file -i filename.txt.

$ file -i vol34.tex 
vol34.tex: text/x-tex; charset=us-ascii

Pour référence, voici mon environnement:

$ which file
/usr/bin/file
$ file --version
file-5.09
magic file from /etc/magic:/usr/share/misc/magic

Certaines versions de file (par exemple, le fichier-5.04 sous OS X/macOS) ont des commutateurs de ligne de commande légèrement différents:

$ file -I vol34.tex 
vol34.tex: text/x-tex; charset=us-ascii
$ file --mime vol34.tex
vol34.tex: text/x-tex; charset=us-ascii

Jetez également un œil ici .

52
mpenkov

Ouvrez le fichier avec Notepad ++ et verrez dans le coin inférieur droit le nom de la table de codage. Et dans le menu encodage, vous pouvez changer la table d'encodage et enregistrer le fichier.

24
Ballon

Vous ne pouvez pas détecter de manière fiable l'encodage à partir d'un fichier texte - ce que vous pouvez faire est de faire une supposition éclairée en recherchant un caractère non ascii et en essayant de déterminer s'il s'agit d'une combinaison unicode qui a du sens dans les langues que vous analysez.

10
Nikolaus Gradwohl

Voir ceci question et réponse sélectionnée . Il n'y a aucun moyen infaillible de le faire. Tout au plus, vous pouvez exclure les choses. Les encodages UTF sur lesquels il est peu probable que vous obteniez de faux positifs, mais les encodages 8 bits sont difficiles, surtout si vous ne connaissez pas la langue de départ. Aucun outil ne gère actuellement tous les encodages 8 bits courants de Mac, Windows, Unix, mais la réponse sélectionnée fournit une approche algorithmique qui devrait fonctionner correctement pour un certain sous-ensemble d'encodages.

4
tchrist

Dans un fichier texte il n'y a pas d'en-tête qui enregistre l'encodage ou plus. Vous pouvez essayer la commande linux/unix find qui essaie de deviner l'encodage:

file -i unreadablefile.txt

ou sur certains systèmes

file -I unreadablefile.txt

Mais cela vous donne souvent text/plain; charset=iso-8859-1 bien que le fichier soit illisible (glyphes cryptiques).

Voici ce que j'ai fait pour trouver le bon codage de fichier pour un fichier illisible, puis le traduire en utf8 après l'installation de iconv. J'ai d'abord essayé tous les encodages, affichant (grep) une ligne qui contenait le mot www. (une adresse de site Web):

for ENCODING in $(iconv -l); do echo -n "$ENCODING "; iconv -f $ENCODING -t utf-8 unreadablefile.txt 2>/dev/null| grep 'www'; done | less

Cette dernière ligne de commande affiche l'encodage du fichier testé, puis la ligne traduite/transcodée.

Certaines lignes montraient des résultats lisibles et cohérents (une langue à la fois). J'ai essayé manuellement certains d'entre eux, par exemple:

ENCODING=WINDOWS-936; iconv -f $ENCODING -t utf-8 unreadablefile.txt -o test_with_${ENCODING}.txt

Dans mon cas, c'était un encodage de fenêtres chinoises, qui est maintenant lisible (si vous connaissez le chinois).

1
erik