m13*_*13r 16 linux command-line byte-order-mark file utf-8
我有一个带有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
Run Code Online (Sandbox Code Playgroud)
ric*_*ici 22
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
Run Code Online (Sandbox Code Playgroud)
如果文件不以UTF-8 BOM开头,则会保持文件不变,否则将删除BOM.
如果您正在使用其他shell,您可能会发现"$(printf '\ufeff')"生成BOM字符(与zsh没有printf内置的任何shell一起使用,只要/usr/bin/printf是Gnu版本),但是如果您想要与Posix兼容的版本,您可以使用:
sed "$(printf '1s/^\357\273\277//)" file.txt
Run Code Online (Sandbox Code Playgroud)
(-i就地编辑标志也是Gnu扩展;此版本将可能修改的文件写入stdout.)
Jos*_*ter 15
在VIM中打开文件:
vi text.xml
Run Code Online (Sandbox Code Playgroud)删除BOM编码:
:set nobomb
Run Code Online (Sandbox Code Playgroud)保存并退出:
:wq
Run Code Online (Sandbox Code Playgroud)Reg*_*tos 13
好吧,今天刚解决了这个问题,我的首选方法是 dos2unix:
dos2unix将删除 BOM 并处理其他 SO 的其他特性:
$ sudo apt install dos2unix
$ dos2unix test.xml
Run Code Online (Sandbox Code Playgroud)
也可以仅删除 BOM (-r, --remove-bom):
$ dos2unix -r test.xml
Run Code Online (Sandbox Code Playgroud)
注意:用 dos2unix 7.3.4 测试
可以使用以下tail命令从文件中删除BOM :
tail --bytes=+4 withBOM.txt > withoutBOM.txt
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15458 次 |
| 最近记录: |