字节序

字节序是指多字节数据在计算机内存中存储或者网络传输时各字节的存储顺序。
1. Little endian:将低序字节存储在起始地址
2. Big endian:将高序字节存储在起始地址

BIG-ENDIAN、LITTLE-ENDIAN跟多字节类型的数据有关的比如int,short,long型,而对单字节数据byte却没有影响。

BOM

BOM(Byte Order Mark,中文名译作“字节顺序标记”。)
Unicode规范中推荐的标记字节顺序的方法是BOM。BOM不是“Bill Of Material”的BOM表,而是Byte Order Mark。BOM是一个有点小聪明的想法:

在UCS编码中有一个叫做"ZERO WIDTH NO-BREAK SPACE"的字符,它的编码是FEFF。而FFFE在UCS中是不存在的字符,所以不应该出现在实际传输中。UCS规范建议我们在传输字节流前,先传输字符"ZERO WIDTH NO-BREAK SPACE"。

这样如果接收者收到FEFF,就表明这个字节流是Big-Endian的;如果收到FFFE,就表明这个字节流是Little-Endian的。因此字符"ZERO WIDTH NO-BREAK SPACE"又被称作BOM。

UTF-8与BOM

UTF-8 BOM又叫UTF-8 签名,其实UTF-8 的BOM对UFT-8没有作用,因为 UTF-8是以一个字节(byte)来表示一个基本组成单位的,BOM的存在是为了支持UTF-16,UTF-32才加上的。
UTF-8其实是不需要BOM来表明字节顺序,但可以用BOM来表明编码方式。字符"ZERO WIDTH NO-BREAK SPACE"的UTF-8编码是EF BB BF。所以如果接收者收到以EF BB BF开头的字节流,就知道这是UTF-8编码了。

参考D.Dark的博客


Jacendfeng
544 声望23 粉丝

爱豆瓣,爱知乎,爱电影,KTV垃圾麦主,专注Java 服务器端开发,技术文章整理者。


引用和评论

0 条评论