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

问题描述 投票:16回答:4

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

$ file test.xml
test.xml:  XML 1.0 document, UTF-8 Unicode (with BOM) text, with very long lines
linux file command-line utf-8 byte-order-mark
4个回答
21
投票

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。

[如果您使用其他外壳程序,则可能会发现"$(printf '\ufeff')"生成BOM字符(与zsh以及任何没有内置printf的外壳程序一起使用,只要/usr/bin/printf是Gnu版本)) ,但是如果您想要兼容Posix的版本,则可以使用:

sed "$(printf '1s/^\357\273\277//)" file.txt

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


15
投票

使用VIM

  1. 在VIM中打开文件:

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

    :set nobomb
    
  3. 保存并退出:

    :wq
    

4
投票

可以使用tail命令从文件中删除BOM:

tail --bytes=+4 withBOM.txt > withoutBOM.txt

3
投票

嗯,今天就处理这个,我的首选方式是dos2unix:

dos2unix将删除BOM并同时照顾其他SO的其他特性:

$ sudo apt install dos2unix
$ dos2unix test.xml

也可以只删除BOM(-r,--remove-bom):

$ dos2unix -r test.xml

注意:已通过dos2unix 7.3.4测试]


0
投票

我们都知道Linux是炸弹,但是如何在Windows上删除BOM?

© www.soinside.com 2019 - 2024. All rights reserved.