我有一个使用BOM表以UTF-8编码的文件,并且想要删除BOM表。是否有任何Linux命令行工具可从文件中删除BOM?

$ file test.xml
test.xml:  XML 1.0 document, UTF-8 Unicode (with BOM) text, with very long lines

最佳答案

BOM是Unicode代码点U + FEFF; UTF-8编码由三个十六进制值0xEF,0xBB,0xBF组成。

使用bash,您可以使用$''特殊引号形式创建UTF-8 BOM,该形式实现Unicode转义:$'\uFEFF'。因此,使用bash,从文本文件开头删除UTF-8 BOM的可靠方法是:

sed -i $'1s/^\uFEFF//' file.txt

如果文件不是以UTF-8 BOM开始,则文件将保持不变,否则将删除BOM。

如果您使用其他 shell 程序,则可能会发现"$(printf '\ufeff')"生成BOM字符(与zsh以及任何没有内置printf的 shell 程序一起使用,但前提是/usr/bin/printf是Gnu版本),但是如果您想要兼容Posix的版本您可以使用:
sed "$(printf '1s/^\357\273\277//)" file.txt

(-i就地编辑标记也是Gnu扩展;此版本将可能已修改的文件写入stdout。)

关于linux - 如何从UTF-8文件中删除BOM表?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45240387/

10-13 02:17