如何从 UTF-8 文件中删除 BOM?

如何从 UTF-8 文件中删除 BOM?

我有一个带有 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

答案1

如果您不确定文件是否包含 UTF-8 BOM,那么(假设 的 GNU 实现sed)将删除 BOM(如果存在),或者如果不存在则不进行任何更改。

sed '1s/^\xEF\xBB\xBF//' < orig.txt > new.txt

您还可以使用以下选项覆盖现有文件-i

sed -i '1s/^\xEF\xBB\xBF//' orig.txt

如果您使用的是 BSD 版本sed(例如 macOS),那么您需要让 bash 进行转义:

 sed $'1s/\xef\xbb\xbf//' < orig.txt > new.txt

答案2

BOM 在 UTF-8 中没有意义。这些通常是由 Microsoft 操作系统上的虚假软件错误添加的。

dos2unix将删除它并处理 Windows 文本文件的其他特性。

dos2unix test.xml

答案3

使用VIM

  1. 在 VIM 中打开文件:

     vi text.xml
    
  2. 删除BOM编码:

     :set nobomb
    
  3. 保存文件并退出:

     :x
    

对于非交互式解决方案,请尝试以下命令行:

vi -c ":set nobomb" -c ":wq" text.xml

这应该删除 BOM、保存文件并退出,所有这些都通过命令行进行。

答案4

为此,我经常使用 vim 单行代码:

vim --clean -c 'se nobomb|wq' filename

vim --clean -c 'bufdo se nobomb|wqa' filename1 filename2 ...

相关内容