之前多次遇到在文件头中看到<feff>的情况,都会导致数据有问题。开始只是删除它没太注意是怎么回事,这次又遇到了这个问题,查了一下,总结了一下问题。分享一下。
先解释一个名词BOM,所谓BOM,全称是Byte Order Mark,它是一个Unicode字符,通常出现在文本的开头,用来标识字节序 (Big/LittleEndian),除此以外还可以标识编码(UTF-8/16/32),如果出现在文本中间,则解释为zero width no-breakspace。
注:Unicode相关知识的详细介绍请参考UTF-8, UTF-16, UTF-32 & BOM。
对于UTF-8/16/32而言,它们名字中的8/16/32指的是编码单位是多少位的,也就是说,它们的编码单位分别是8/16/32位,换算成字节就是1/2/4字节,如果是多字节,就要牵扯到字节序,UTF-8以单字节为编码单位,所以不存在字节序。
八进制的BOM:357、273、277,十六进制的BOM:EF、BB、BF,
在windows下保存文件编码为UTF-8会在文件头加上BOM,所以我们在读文件时会出现报错。在linux下用vim打开会看到<feff>,就是这个问题。
linux下
如何检测UTF-8编码中的BOM呢?
shell> grep -I-r -l $'\xEF\xBB\xBF' /path
如何删除UTF-8编码中的BOM呢?
shell> grep -I-r -l $'\xEF\xBB\xBF' /path | xargs sed -i 's/^\xEF\xBB\xBF//;q'
windows下把文件用记事本打开另存为ANSI就可以了。