BOM 在各种编码会有各种表示,详见:字节顺序标记

  • UTF-8 的 BOM 是 EF BB BF
  • UTF-16BE 的 BOM 是 FE FF
  • UTF-16LE 的 BOM 是 FF FE

增加 BOM

# UTF-8
sed -i '1s/^\(\xef\xbb\xbf\)\?/\xef\xbb\xbf/' test.csv

# UTF-16BE
sed -i '1s/^\(\xfe\xff\)\?/\xfe\xff/' test.csv

# UTF-16LE
sed -i '1s/^\(\xff\xfe\)\?/\xff\xfe/' test.csv

移除 BOM

# UTF-8
sed -i 's/\xef\xbb\xbf//' test.csv

# UTF-16BE
sed -i 's/\xfe\xff//' test.csv

# UTF-16LE
sed -i 's/\xff\xfe//' test.csv

参考:

  1. Linux CLI 對 UTF-8 檔案增加 BOM 怎麼做
  2. BOM in iconv