字符集编码 Unicode UTF8 UTF16 UTF32 和BOM(Byte Order Mark)

  • Post author:
  • Post category:其他


BOM(Byte Order Mark)

在分析unicode之前,先把bom(byte order mark)说一下。

bom是unicode字符顺序的标识符号,一般以魔数(magic code)的形式出现在以Unicode字符编码的文件的开始的头部,作为该文件的编码标识。

来举个很简单的例子,在windows下新建一个文本文件,并另存为utf8的文件格式:

这里写图片描述

该文件里面没有任何内容,我们再用Hex Edit来查看该文件的二进制内容:

这里写图片描述

0XEFBBBF就是这个文件的bom, 这也就是标识该文件是以utf8为编码格式的,下面来看看字符编码与其bom的对应关系

字符编码 Bom (十六进制)
UTF-8 EF BB BF
UTF-16 (BE) 大端 FE FF
UTF-16 (LE) 小端 FF FE
UTF-32 (BE) 大端 00 00 FE FF
UTF-32 (LE) 小端 FF FE 00 00
GB-18030 84 31 95 33

上面只是列举了一些常用的字符编码,上面其它的bom验证也可以像上面的utf8 bom一样验证。

UTF-8编码剖析

Unicode编码以code point 来标识每一个字符, code point 的范围是

0x000000 – 0x10FFFF,也就是每一个字符的code point都落在这个范围,而utf8的一个字符可以用1-4字节来表示,可能有人会说这code point最大也就是0x10FFFF,为什么最大不是可以用三个字节表示呢?那是因为utf8有自己独特的表示格式,先来看看下面的对应关系:

字节数 字符code point位数 最小的code point 最大的code point 第一个字节 第二个字节 第三个字节 第四个字节



版权声明:本文为rodbate原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。