lunawen / lunawen-blog-comment

0 stars 0 forks source link

basics/20201129-luna-tech-unicode-plane/ #49

Open utterances-bot opened 11 months ago

utterances-bot commented 11 months ago

Unicode - 平面(Plane)的概念 - Luna Tech

https://lunawen.com/basics/20201129-luna-tech-unicode-plane/

tomatofrommars commented 11 months ago

划分 17 个平面是受限于 UTF-16 编码空间的结果。

1990 年的 Unicode 还只有 16 位,彼时的另一大标准 ISO 的通用字符集要发布一个 32 位的方案——ISO/IEC 10646,能编码更多字符,但也更耗空间。

同是 Unicode 联盟成员的各大软件公司都反对这个方案。为了计算机的未来,双方就协商出了一个相互兼容的方案——UTF-16(详细描述见维基百科)。

UTF-16 编码的扩展平面字符占 32 位,减去固定高位代理(110110)和固定低位代理(110111)所占位数 12 位,剩余 20 位,按照单个平面 65536 个字符设定,20 位可划分的平面数为 2^20 / 65536 = 16 个平面,再加上 1 个基本平面,就是 17 个平面。

代理数值的确定:个人猜测,这里的高位代理和低位代理要求成对出现,排除基本平面内已经分配了的空间,连续且空间最大的范围就只剩 0xD800 ~ 0xDFFF 了,即 11011000 00000000 ~ 11011111 00000000