BOM字符

一、BOM的概念
BOM的英文全称是"byte order mark",它是Unicode字符编码方案中的一个特殊字符,它是作为辅助之用的字符,而不是一个可打印字符。

二、BOM的作用
BOM指代的字节序列如果出现在字节流的最前面(在Unicode 3.2之前,BOM指代的字节序列出现的位置可以不是字节流的最前面,在Unicode 3.2之后,BOM指代的字节序列必须是字节流的最前面),它有以下几个作用:
1)表明编码得到字节流采用的是大端序,还是小端序。一个Unicode字符可以使用1个字节,2个字节或者4个字节进行编码,在采用2个字节或者4个字节进行编码时,又可以使用大端序或者小端序,在一个处理程序接收到这样的字节流后,可以通过字节流的最前面的字节序列,即BOM字符的字节序列采用的是大端序还是小端序,来获知编码得到该字节流时使用的是大端序还是小端序。
2)表明编码得到字节流有很大可能性采用了Unicode编码方案。
3)表明具体采用哪个Unicode编码方案。在不同的Unicode编码方案中,BOM字符对应的字节序列不一样,基于该点,根据获得的BOM字符的字节序列,可以推测出所采用的Unicode编码方案。

三、几个Unicode编码方案中的BOM
3.1、UTF-8
在UTF-8中,BOM字符对应的字节序列是“0xef,0xbb,0xbf”。在UTF-8中,不推荐使用BOM字符,因为在使用UTF-8编码方案编码得到的字节流中,很容易就可以根据一些字符对应的特殊的字节序列而检测出所使用的编码方案是UTF-8。UTF-8一直使用大端序,不使用小端序。
3.2、UTF-16
在UTF-16中,BOM字符对应的字节序列是“0xfe 0xff”(这是小端序,大端序是"0xff 0xfe")。
3.3、UTF-32
在UTF-32中,BOM字符对应的字节序列是“0x00 0x00 0xfe 0xff”(这是小端序,大端序是"0xff 0xfe 0x00 0x00")。


参考文献:
[1]https://en.wikipedia.org/wiki/Byte_order_mark
[2]http://stackoverflow.com/questions/3833693/isn-t-on-big-endian-machines-utf-8s-byte-order-different-than-on-little-endian



你可能感兴趣的:(BOM字符)