这篇博客简要介绍一下万国码的BOM信息以及万国码的大小端
实际存储编码总结
在前边的几篇博客中介绍在主要的几种万国码的实际存储编码,在这里简单的总结一下.
实际存储编码 | 对应的理论编码 | 是否变长存储 | 编码大小 | 其他名称 |
---|---|---|---|---|
ucs-2 | ucs2 | 不变长存储 | 2个字节 | Unicode |
utf-8 | ucs2、ucs4 | 变长存储 | 最小1个字节,最大6个字节(分配的基本单位是1个字节) | |
utf-16 | ucs4 | 变长存储 | 2个字节或4个字节(分配的基本单位是2字节) | |
utf-32 | ucs4 | 不变长存储 | 4个字节 | ucs-4 |
BOM信息
什么是BOM信息
- BOM信息是一种标示,用于告诉文本编辑器这个文件使用的是什么编码,以及编码使用的大端存储还是小端存储.
- 例如utf-8的BOM信息是
EF BB BF
,如果保存文件时使用的是UTF-8 with BOM
这种编码在文件的最前边就会有这段信息. - 如果保存时使用的是普通的
UTF-8
编码就没有这段BOM信息.
注意
即使文件保存时没有保存BOM信息,文本编辑器仍然能够知道文件使用的是哪种编码.
大小端
例子
大端存储
- 编码按照
从低位到高位
的方向存储到内存中. - 即高位字节存储到低地址中,低位字节存储到高地址中.
- 大端存储的情况如下
小端存储
- 与大端存储相反
- 小端存储的情况如下
为什么会有大小端
文本编辑器在读取编码时,会按顺序按照每种编码方案的基本单位读取。例如utf-8
的基本单元是1个字节,那么文本编辑器一次读取1个字节;utf-16
的基本单元是2个字节,那么文本编辑器一次读取2个字节.
假如使用的是utf-16
编码,那么在读取到2个字节后,又出现了一个问题,在这个基本单元(2个字节)中,先读取哪个字节.
大小端存储解决的就是这个问题基本单元内先读哪个字节
,如果是大端存储,先读低地址字节;如果是小端存储先读高地址字节.
因为utf-8
的基本单元是一个字节,因此utf-8
就不存在大小端的问题了