La file
commande fait des "suppositions" sur l'encodage. Utilisez le -i
paramètre pour forcer l’ file
impression d’informations sur le codage.
Manifestation:
$ file -i *
umlaut-iso88591.txt: text/plain; charset=iso-8859-1
umlaut-utf16.txt: text/plain; charset=utf-16le
umlaut-utf8.txt: text/plain; charset=utf-8
Voici comment j'ai créé les fichiers:
$ echo ä > umlaut-utf8.txt
De nos jours, tout est utf-8. Mais convaincez-vous:
$ hexdump -C umlaut-utf8.txt
00000000 c3 a4 0a |...|
00000003
Comparez avec https://en.wikipedia.org/wiki/Ä#Computer_encoding
Convertir les autres encodages:
$ iconv -f utf8 -t iso88591 umlaut-utf8.txt > umlaut-iso88591.txt
$ iconv -f utf8 -t utf16 umlaut-utf8.txt > umlaut-utf16.txt
Vérifiez le vidage hexadécimal:
$ hexdump -C umlaut-iso88591.txt
00000000 e4 0a |..|
00000002
$ hexdump -C umlaut-utf16.txt
00000000 ff fe e4 00 0a 00 |......|
00000006
Créez quelque chose d'invalide en mélangeant les trois:
$ cat umlaut-iso88591.txt umlaut-utf8.txt umlaut-utf16.txt > umlaut-mixed.txt
Ce qui file
dit:
$ file -i *
umlaut-iso88591.txt: text/plain; charset=iso-8859-1
umlaut-mixed.txt: application/octet-stream; charset=binary
umlaut-utf16.txt: text/plain; charset=utf-16le
umlaut-utf8.txt: text/plain; charset=utf-8
sans -i
:
$ file *
umlaut-iso88591.txt: ISO-8859 text
umlaut-mixed.txt: data
umlaut-utf16.txt: Little-endian UTF-16 Unicode text, with no line terminators
umlaut-utf8.txt: UTF-8 Unicode text
La file
commande n'a aucune idée de "valide" ou "invalide". Il ne voit que quelques octets et essaie de deviner ce que l'encodage pourrait être. En tant qu'êtres humains, nous pourrions être en mesure de reconnaître qu'un fichier est un fichier texte avec quelques trémas dans un "mauvais" codage. Mais en tant qu'ordinateur, il aurait besoin d'une sorte d'intelligence artificielle.
On pourrait soutenir que l'heuristique de file
est une sorte d'intelligence artificielle. Pourtant, même si c'est le cas, il s'agit d'un projet très limité.
Voici plus d'informations sur la file
commande: http://www.linfo.org/file_command.html