该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
检查十六进制转储:
$ hexdump -C umlaut-iso88591.txt
00000000 e4 0a |..|
00000002
$ hexdump -C umlaut-utf16.txt
00000000 ff fe e4 00 0a 00 |......|
00000006
通过混合所有三个来创建“无效”的东西:
$ 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