编码文件shell脚本

riz*_*oro 33 linux bash shell encoding

如何在shell脚本中检查文件编码?我需要知道文件是用utf-8还是iso-8859-1编码的.

谢谢

Chr*_*heD 58

我只是用

file -bi myfile.txt
Run Code Online (Sandbox Code Playgroud)

确定特定文件的字符编码.

一个具有外部依赖性的解决方案,但我怀疑file现在在所有半现代发行版中都很常见.

编辑:

作为对劳伦斯贡萨尔维斯评论的回应:b选择是"简短"(不包括文件名),并且i是速记等同--mime于最便携的方式(包括Mac OSX),那么可能是:

file --mime myfile.txt 
Run Code Online (Sandbox Code Playgroud)

  • `file -bi`适用于Linux,但不适用于OS-X.在OS-X上,它表示编码的"常规文件".在没有标志的情况下,`file --mime`或只是`file`同时适用于OS-X和Linux. (8认同)

Lau*_*ves 9

没有办法100%确定(除非你正在处理内部声明其编码的文件格式).

大多数尝试进行此区分的工具都会尝试将文件解码为utf-8(因为这是更严格的编码),如果失败,则回退到iso-8859-1.您可以使用iconv"手动" 执行此操作,也可以使用file:

$ file utf8.txt
utf8.txt: UTF-8 Unicode text
$ file latin1.txt
latin1.txt: ISO-8859 text
Run Code Online (Sandbox Code Playgroud)

请注意,ASCII文件兼容UTF-8和ISO-8859-1.

$ file ascii.txt
ascii.txt: ASCII text
Run Code Online (Sandbox Code Playgroud)

最后:没有真正的方法来区分ISO-8859-1和ISO-8859-2,例如,除非你假设它是自然语言并使用统计方法.这可能是文件说"ISO-8859"的原因.


joc*_*hil 8

你可以使用file命令 file --mime myfile.text