如何检查 UTF-8 文本文件是否有物料清单从命令行?
file
命令显示:
UTF-8 Unicode text
但是,我不知道这是否意味着文件中没有 BOM。
我使用的是 Ubuntu 12.04。
答案1
file
会告诉你是否有物料清单。您可以简单地测试它:
printf '\ufeff...\n' | file -
/dev/stdin: UTF-8 Unicode (with BOM) text
某些 shell(例如ash
或 )dash
具有printf
不支持的内置命令\u
,在这种情况下您需要使用printf
GNU coreutils,例如/usr/bin/printf
。
注意:根据file
更新日志,此功能在 2007 年就已存在。因此,这应该适用于当前的任何计算机。
答案2
如果你执行stat fileName
它应该会给你准确的三个字符。当我在编辑器中打开文件时,我看不到任何内容。因此,注意到文件大小为 3 让我清楚地知道它有 BOM。
另外,帖子这里对我来说很有帮助。
hexdump -n 3 -C 2.txt
00000000 ef bb bf
ef bb bf // YES
答案3
另一种变体—— dos2unix
:
$ dos2unix -ib *.txt
no-bom f1.txt # this file has no BOM
utf-8 f2.txt # this file has BOM + UTF-8
此命令具有更改文件格式的选项,例如添加或删除 BOM
答案4
带有 BOM 的 UTF-8 文件以 3 个字节 0xef 0xbb 0xbf 开头,即 U+FEFF 字符的 UTF-8 编码。
您可以通过读取文件的前 3 个字节在 bash 中有效地找到这些文件:
find . -type f -size +2c -print0 |
while IFS= read -rd '' file; do
IFS= LC_ALL=C read -rd '' -n3 first3 < "$file" &&
[[ $first3 = $'\xef\xbb\xbf' ]] &&
printf '%s\n' "$file"
done
它不会检查文件的其余部分是否是有效的 UTF-8,但也不会file
,这只是一种启发式方法。