引子
最近做项目导出UTF-8的文档,结果用MS Excel打开出现乱码,检查了字符串编码,输出编码设置都正确,后来用notepad++打开,显示正确,查看编码才发现编码是UTF-8 without BOM,原来是这个BOM在作怪,查询了下资料,把这个家伙弄处理说说。
BOM是什么
BOM,是Byte Order Mark的缩写,是Unicode用来标识字节码顺序(Big endian/ Little endian)及编码的特征码。
BOM既可以放在文件头,也可以出现在流数据中。
常见编码的BOM
UTF-8的BOM
UTF-8的BOM是三个字节:0xEF, 0xBB, 0xBF,这三个字节在UTF-8编码里是没有意义的。
UTF-8的BOM是不推荐使用的,但MS仍然在使用,因此导出UTF-8时,不加这三个字节,MS打开就会乱码。
UTF-16的BOM
UTF-16的Big endian的BOM是:0xFE, 0xFF。
UTF-16的Littal endian的BOM是: 0xFF, 0xFE。
GB18030的BOM
GB18030的BOM是:0x81,0x31,0x95,0x33。