字符编码之 BOM(Byte Order Mark)

BOM 标示叫 “ZERO WIDTH NO-BREAK SPACE” 即没有宽度的空格符,本质上是 null值,但是不同与编程语言中的 null.

BOM, unicode 字符标识, 常被用来标识文件编码(UTF-8/16/32), 十进制编码为“65279”. 通常放在文件开头, 用来标记多字节编码文件的编码类型和字节顺序(big/little Endian).

对于UTF-8/16/32而言,它们名字中的8/16/32指的是编码单位是多少位的,也就是说,它们的编码单位分别是8/16/32位,
换算成字节就是1/2/4字节,如果是多字节,就要牵扯到字节序,UTF-8以单字节为编码单位,所以不存在字节序。


对于UTF-8来说,BOM标记的有无并不是必须的,是可选的,因为UTF8字节没有顺序,不需要标记.
也就是说一个UTF-8文件可能有BOM,也可能没有BOM.

windows上面的notepad等程序在打开文件的时候(unicode文件)会自动添加 EF BB BF 三个字节(BOM)
然而这个只是微软暗自作的标记, 其它平台上不一定会对UTF-8文本文件做个这样的标记。
微软的一些软件会做这种检测,但有些软件不做这种检测, 而把它当作正常字符处理。(乱码问题产生了)

引用
UTF-8 BOM   [ EF BB BF ]

UTF-16  BOM  [ FF FE ]

UTF-16  BE BOM [ FE FF ]

UTF-32  BOM  [ FF FE 00 00 ]

UTF-32 BE BOM [ 00 00 FE FF ]

猜你喜欢

转载自ya916.iteye.com/blog/1812654