2.4.2. Unicode编码规则

为了将世界上几乎所有的字符都涵盖了,那么就要了解世界上,有哪些字符。

除了之前ASCII的拉丁字母,ISO 8859所包含的欧洲多国用的字符之外,亚洲一些国家,包括中文,日文,韩文等,尤其是中文,包含的字符数,大概有几万个。

因此,Unicode的编码就要设计的把这么多的字符都包含在内。

Unicode的编码方式与上面提到的ISO 10646的UCS概念相对应,目前实际应用的Unicode版本对应于UCS-2,即2字节的UCS字符集,使用16位的编码空间。每个字符占用2个字节,这样理论上一共最多可以表示2^16=65536个字符。基本满足各种语言的使用。实际上目前版本的Unicode尚未填充满这16位编码,保留了大量空间作为特殊使用或将来扩展。

上述16位Unicode字符构成基本多文种平面(Basic Multilingual Plane,简称BMP)。最新(但未实际广泛使用)的Unicode版本定义了16个辅助平面,两者合起来至少需要占据21位的编码空间,比3字节略少。但事实上辅助平面字符仍然占用4字节编码空间,与UCS-4保持一致。未来版本会扩充到ISO 10646-1实现级别3,即涵盖UCS-4的所有字符。

UCS-4是一个更大的尚未填充完全的31位字符集,加上恒为0的首位,共需占据32位,即4字节。理论上最多能表示2^31=2147483648=21亿左右个字符,完全可以涵盖一切语言所用的符号。

具体的取值范围和所对应的平面空间划分,参见图 2.3 “Unicode中的各种平面划分”

图 2.3. Unicode中的各种平面划分

Unicode中的各种平面划分


Unicode中的0-0xFFF的BMP中的任何一个编码的值,称为码点(Code Point),对应用U+hhhh来表示,其中每个h 代表一个十六进制数位。

与UCS-2编码完全相同。对应的4字节UCS-4编码后两个字节一致,前两个字节的所有位均为0。