如何从 UTF-8 文件中删除 BOM?[重复]
- 2024-10-24 08:51:00
- admin 原创
- 61
问题描述:
我有一个 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
解决方案 1:
使用 VIM
在 VIM 中打开文件:
vi text.xml
删除BOM编码:
:set nobomb
保存并退出:
:wq
对于非交互式解决方案,请尝试以下命令行:
vi -c ":set nobomb" -c ":wq" text.xml
这应该删除 BOM,保存文件并退出,所有操作都从命令行进行。
解决方案 2:
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
与任何没有内置命令的 shell 一样好用printf
,前提是它/usr/bin/printf
是 Gnu 版本),但如果您想要一个与 Posix 兼容的版本,您可以使用:
sed "$(printf '1s/^//')" file.txt
(-i
就地编辑标志也是 Gnu 扩展;此版本将可能修改的文件写入标准输出。)
解决方案 3:
好吧,今天刚刚处理了这个问题,我喜欢的方式是 dos2unix:
dos2unix将删除 BOM,并处理其他 SO 的其他特性:
$ sudo apt install dos2unix
$ dos2unix test.xml
也可以仅删除 BOM (-r,--remove-bom):
$ dos2unix -r test.xml
注意:使用 dos2unix 7.3.4 进行测试
解决方案 4:
如果您确定某个文件以 BOM 开头,则可以使用以下tail
命令从文件中删除 BOM:
tail --bytes=+4 withBOM.txt > withoutBOM.txt
解决方案 5:
如果您想要处理大量文件,通过改进 Reginaldo Santos 的答案,有一种快捷方法:
find . -name "*.java" | grep java$ | xargs -n 1 dos2unix
解决方案 6:
Joshua Pinter 的答案在 Mac 上可以正常工作,因此我编写了一个脚本,从给定文件夹中的所有文件中删除 BOM,请参阅此处。
其使用方式如下:
从当前目录中的所有文件中删除 BOM:rmbom .
打印当前目录中所有带有 BOM 的文件:rmbom . -a
仅删除当前目录中所有以 txt 或 cs 为扩展名的文件的 BOM:rmbom . -e txt -e cs
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件