UTF-8最多到31位,UTF-16只能编码0x 0~10FFFF,这些编码能力现在看来够用了,但并不保证未来够用。以后unicode如果出现大幅扩充,用UTF-8和UTF-16也要能表示,所以,有了本文所描述的扩展方案。
主要针对UTF-16。它有三种模式
xxxxxxxx xxxxxxxx → A模式
110110xx xxxxxxxx → B模式
110111xx xxxxxxxx → C模式
大部分字符用A模式可以描述,对于大于65536的,用BC模式,即一个B表示高位,一个C表示低位。
如果B和C用高和低来理解,就无法理解BBC和BBBC等。所以,应该理解C模式为“终止”,这样一来,就能无限扩充UTF-16的表达能力。
例如,BBBBBC,12字节,能表达60位,在64位计算机上,这算是极限了。
另外,UTF-16规定了U=U’+0x10000,这出现于BC模式,用于把表示范围从0~FFFFF扩充至10000~10FFFF。
在BBC、BBBC、BBBBC等模式中,是否还要加0x10000,有待考虑。出于兼容现在的UTF-16,仅在BC模式下加上0x10000就够了。
对于UTF-8,扩充将使它失去一部分优美特性,例如,扩充到8字节时,就成了:
11111111 0xxxxxxx (10xxxxxx)*6
第二字节和单字节模式重复了,分不清是8字节模式的第二字节,还是一个ASCII码,这导致UTF-8不那么优美了。