是否有Linux命令来查找文件是否为UTF-8?


14

Joomla .ini文件需要另存为UTF-8。

编辑后,我不确定文件是否为UTF-8。

是否有Linux命令类似file或一些命令来判断文件是否确实为UTF-8?


4
您无法确定文件的编码。您只能做出明智的猜测。您可能大多数都猜对了,但有时猜测却失败了。file是一个程序进行智能猜测的示例。
Marco Marco

1
@Marco:但是可以验证它是否为有效的UTF-8。有一些编码,可以发送了错误的为有效的UTF-8,但它几乎从来没有与ISO-8859-𝒏或Windows的125𝒏编码/字符集发生。
2013年

Answers:


28

您可以使用以下命令确定文件编码:

file -bi filename

3
@nicolas对于MacOS,您可以尝试file -I filename(-I是大写字母i)。
瑞克

5
这会读取整个文件吗?
ctrl-alt-delor

2
@ kojow7 utf-8没有标题。纯ASCII(仅7位)与utf-8是无法区分的(也就是说,标头会引起各种问题)。因此,如果第一个MB的文件为ASCII,然后只有一个UTF-8字符,那么除非您读取了整个文件,否则您将不会知道。
ctrl-alt-delor

3
这不应该作为答案。'file'命令不这样做;它仅读取文件的一部分,并使用幻数进行最佳猜测。有时候,“文件”可能会给您错误的答案。要验证文件是否通过了诸如ascii,iso-8859-1,utf-8之类的编码,那么最好使用“ iconv”命令。
蒂姆

1
我已经测试过了,它可能并且确实会失败。
蒂姆

9

可以使用moreutils软件包中的isutf8命令。

资料来源:如何判断文件是否为UTF-8编码?



@davidpostill我很好奇,是在参考文献中引用作者的错误做法吗?
Pablo Olmos de Aguilera C.

否。但是,这是很好的做法,使链接说顺其自然我。假设我只阅读蓝色文本。编辑后,我可以告诉我为什么以及何时单击。以前,我做不到。(不是我进行编辑的,但我想94%的人确定这就是事实。)
HermannDöppes18年

很好,并且可以与配合使用find -type f -exec isutf8 {} +,因为它还引用了文件名。(而且使用find ... -exec ... +也很快)
Tomasz Gandor

2

不要使用该file命令。它不检查整个文件,并且基本上是猜测。有时会给出错误的答案。

您可以验证文件是否碰巧通过了UTF-8编码,如下所示:

$ iconv -f utf8 <filename> -t utf8 -o /dev/null

返回码为零表示它通过了UTF8。非零返回码表示它不是有效的UTF8。

这是不可能知道一个文件是使用任何特定的编码方案必然出口,一些编码方案重叠。为此,需要将元数据嵌入文件中,即使那样,您也将信任生成该文件的人,而不是自己对其进行验证...,并且应始终自己对其进行验证。


0

还有一种方法是使用recode,如果尝试解码UTF-8并遇到无效字符,则会退出并显示错误。

if recode utf8/..UCS < "$FILE" >/dev/null 2>&1; then
    echo "Valid utf8 : $FILE"
else
    echo "NOT valid utf8: $FILE"
fi
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.