如何检查文件是否具有UTF-8文本的BOM


18

如何从命令行检查utf-8文本文件是否具有BOM表?

file命令显示了我UTF-8 Unicode text

但是我不知道这意味着文件中没有BOM。

我正在使用Ubuntu 12.04


请注意,UTF-8中没有BOM;这是UTF-16的功能。UTF-8文件可以以U + FEFF字符开头,但在这种情况下,它是零宽度的空间。
吉尔斯(Gillles)“所以-别再邪恶了”(

Answers:


30

file会告诉您是否有BOM。您可以测试:

$ /usr/bin/printf "\ufeff...\n" | file -
/dev/stdin: UTF-8 Unicode (with BOM) text

注意:根据file变更日志,此功能已在2007年存在。因此,此功能应在任何当前计算机上都有效。


1
感谢您的回答。我的file版本是file-5.09,结果是/dev/stdin: ASCII text。是否取决于版本file
ironsand 2014年

@Tetsu我用file5.04(Debian压缩)进行了测试,还可以。根据变更日志,即使在2007年(未经测试)。但是您可以做我在答案中给出的测试。
vinc17 2014年

我刚刚language-pack-ja从安装apt,那么您的示例可以完美运行。谢谢你的帮助!
ironsand 2014年

4

如果执行stat fileName,应该给您确切的三个字符。当我在编辑器中打开文件时,我什么都看不到。因此,注意到文件大小为3,使我清楚地知道它具有BOM。

另外,就我而言,这里的帖子非常有用。

hexdump -n 3 -C 2.txt
00000000 ef bb bf
ef bb bf // YES
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.