2.7. BOM

2.7.1. BOM是什么

BOM是一个Unicode字符。

BOM用于指示文件/字符流的大小端(字节序)。

不同编码所对应的BOM不同。

2.7.2. 为何需要BOM

即使对于字符进行了某种编码,可以正确读取/写入,可以正常显示字符了。

但是遇到将一个文件/字符流,从一个地方传输到另一个地方的话,就会遇到一些问题:

比如,本地是一个用UTF-16 LE编码的文件,传入到网络的另一端,接受者怎么知道你用的是UTF-16 LE的编码,而不是UTF-16 BE呢?

如果不知道,用了错误的UTF-16 BE去解码,且不是会导致乱码问题了。

所以,就需要一个说明和解释,目前的做法就是,在文件头(字符流的开始),添加一个BOM,Byte Order Mark,字节序的标记,用于表示此编码是LE还是BE。

2.7.3. BOM表

相关的不同编码所用的BOM,参见摘录自[33]表 A.8 “不同编码所用的BOM”

关于UTF-8的BOM: EF BB BF,可参考第 2.4.3.2.1 节 “关于UTF-8的BOM:“EF BB BF””