Der file
Befehl macht "Best-Rates" über die Codierung. Verwenden Sie den -i
Parameter, um file
das Drucken von Informationen zur Codierung zu erzwingen .
Demonstration:
$ 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
So habe ich die Dateien erstellt:
$ echo ä > umlaut-utf8.txt
Heutzutage ist alles utf-8. Aber überzeugen Sie sich selbst:
$ hexdump -C umlaut-utf8.txt
00000000 c3 a4 0a |...|
00000003
Vergleichen Sie mit https://en.wikipedia.org/wiki/Ä#Computer_encoding
Konvertieren Sie in die anderen Kodierungen:
$ iconv -f utf8 -t iso88591 umlaut-utf8.txt > umlaut-iso88591.txt
$ iconv -f utf8 -t utf16 umlaut-utf8.txt > umlaut-utf16.txt
Überprüfen Sie den Hex-Dump:
$ hexdump -C umlaut-iso88591.txt
00000000 e4 0a |..|
00000002
$ hexdump -C umlaut-utf16.txt
00000000 ff fe e4 00 0a 00 |......|
00000006
Erstelle etwas "Ungültiges", indem du alle drei mischst:
$ cat umlaut-iso88591.txt umlaut-utf8.txt umlaut-utf16.txt > umlaut-mixed.txt
Was file
sagt:
$ 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
ohne -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
Der file
Befehl hat keine Ahnung von "gültig" oder "ungültig". Es werden nur einige Bytes angezeigt, und es wird versucht, die Codierung zu erraten. Als Mensch können wir möglicherweise erkennen, dass eine Datei eine Textdatei mit einigen Umlauten in einer "falschen" Codierung ist. Aber als Computer würde es eine Art künstliche Intelligenz brauchen.
Man könnte argumentieren, dass die Heuristik file
eine Art künstliche Intelligenz ist. Aber selbst wenn es so ist, ist es sehr begrenzt.
Hier finden Sie weitere Informationen zum file
Befehl: http://www.linfo.org/file_command.html