Unicode和UTF系列(2)
UFT-8
UTF-8采用的是变长码的方式,其编码规则如下:
代码点值的范围(16进制) 第1字节 第2字节 第3字节
0000 0000-0000 007F 0xxxxxxx0-127)
0000 0080-0000 07FF 110xxxxx (192-223) 10xxxxxx (128-191)
0000 0800-0000 FFFF 1110xxxx (224-239) 10xxxxxx (128-191) 10xxxxxx (128-191)
注:x的内容是将左边代码点的二进制值依次注入。
理论上UTF-8可以达到6个字节编码(上表省略后3位字节以上的编码方式),但实际上,我们一般只采用0x0000 0000 到0x0000 0000FFFF的范围内的字符,也就说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的所有代码点。