Unicode和UTF系列(2)

UFT-8

UTF-8采用的是变长码的方式,其编码规则如下:

代码点值的范围(16进制)第1字节第2字节第3字节

00000000-0000007F0xxxxxxx0-127)

00000080-000007FF110xxxxx(192-223)10xxxxxx(128-191)

00000800-0000FFFF1110xxxx(224-239)10xxxxxx(128-191)10xxxxxx(128-191)

注:x的内容是将左边代码点的二进制值依次注入。

理论上UTF-8可以达到6个字节编码(上表省略后3位字节以上的编码方式),但实际上,我们一般只采用0x00000000到0x00000000FFFF的范围内的字符,也就说UTF-8实际上只采用了3个字节编码。

UTF-8除了省空间和兼容ASCII的优点后,其编码方式(类似于哈夫曼编码,很容易判断出1个字节及其后面的字节数)决定了它以下两个优点:

1、与字节顺序无关,可以在不同平台之间交流。

2、容错能力高,任何一个字节损坏后,最多只会导致一个编码码位损失,不会链锁错误(如GB码错一个字节就会整行乱码)

UTF-16和UTF-32

UTF-16是变长码,大致上相当于UCS-2码的直接实现,但是也有一部分UCS-4的字符。所以可以猜到,它大部分是采用2个字节编码,而有部分特殊符号采用3字节编码,所以大致相当于20位编码,值在0到0x10FFFF之间。

UTF-32用四个字节表示代码点,这样就可以完全表示UCS-4的所有代码点。

相关推荐