即使对于字符进行了某种编码,可以正确读取/写入,可以正常显示字符了。
但是遇到将一个文件/字符流,从一个地方传输到另一个地方的话,就会遇到一些问题:
比如,本地是一个用UTF-16 LE编码的文件,传入到网络的另一端,接受者怎么知道你用的是UTF-16 LE的编码,而不是UTF-16 BE呢?
如果不知道,用了错误的UTF-16 BE去解码,且不是会导致乱码问题了。
所以,就需要一个说明和解释,目前的做法就是,在文件头(字符流的开始),添加一个BOM,Byte Order Mark,字节序的标记,用于表示此编码是LE还是BE。
相关的不同编码所用的BOM,参见摘录自[33]的表 A.8 “不同编码所用的BOM”
关于UTF-8的BOM: EF BB BF,可参考第 2.4.3.2.1 节 “关于UTF-8的BOM:“EF BB BF””