このfile
コマンドは、エンコーディングについて「最良の推測」を行います。-i
パラメータを使用してfile
、エンコードに関する情報を強制的に印刷します。
デモンストレーション:
$ 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
ファイルの作成方法は次のとおりです。
$ echo ä > umlaut-utf8.txt
現在、すべてがutf-8です。しかし、自分を納得させる:
$ hexdump -C umlaut-utf8.txt
00000000 c3 a4 0a |...|
00000003
https://en.wikipedia.org/wiki/Ä#Computer_encodingと比較してください
他のエンコーディングに変換します:
$ iconv -f utf8 -t iso88591 umlaut-utf8.txt > umlaut-iso88591.txt
$ iconv -f utf8 -t utf16 umlaut-utf8.txt > umlaut-utf16.txt
16進ダンプを確認します。
$ hexdump -C umlaut-iso88591.txt
00000000 e4 0a |..|
00000002
$ hexdump -C umlaut-utf16.txt
00000000 ff fe e4 00 0a 00 |......|
00000006
3つすべてを混合して「無効な」何かを作成します。
$ cat umlaut-iso88591.txt umlaut-utf8.txt umlaut-utf16.txt > umlaut-mixed.txt
何file
と言います:
$ 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
なし-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
file
コマンドは、「有効」または「無効」のないアイデアを持っていません。それは単にいくつかのバイトを見て、エンコーディングが何であるかを推測しようとします。人間として、ファイルが「間違った」エンコーディングのウムラウトを含むテキストファイルであることを認識することができるかもしれません。しかし、コンピューターとしては、何らかの人工知能が必要です。
ヒューリスティックfile
は何らかの人工知能であると主張する人もいるかもしれません。しかし、たとえそうであっても、それは非常に限られたものです。
file
コマンドの詳細は次のとおりです。http://www.linfo.org/file_command.html