UTF-16保留代码点

Muh*_*mad 3 unicode utf-16 codepoint

为什么UTF-16在UCS数据库中有保留范围?

UTF-16只是一种使用一个或两个表示字符标量值的方法unsigned 16-bits,这些值的布局不应与字符标量值相关,因为我们应该应用一些算法来从这种表示中获取实际的字符标量值.

假设保留范围D800-DBFF并且DC00-DFFF不在UCS数据库中保留,并且还有另一种UTF-16表示,它可以表示0-7FFF单个范围内的所有字符unsigned 16-bits,当设置高位时,则跟随另一个16位.比特,对于字节顺序标记,我们将保留两个可能的值,就是这样.

如果我错了,你可以向我解释一下.

谢谢

Jon*_*eet 7

您提出的方案效率低于当前的代理对方案,这是一个问题.

目前,只有0xD800-0xDFFF(2048个代码单元)作为普通字符"超出范围",留下63488个代码单元映射到单个字符.根据您的建议,0x8000-0xFFFF(32768)代码单元保留用于多代码单元代码点,只留下其他32768代码单元用于单代码单元代码点.

我不知道目前在基本的多语言平面中指定了多少个代码点,但如果它超过32768我就不会感到惊讶,当然它可以增长.一旦超过32768,就会有更多字符需要在您的提案下表示两个代码单元,而不是UTF-16.

现在我同意这一点都不要求UCS包含一个保留范围(并且在某些方面它是一种丑陋的混合意义) - 但这样做会使得简单(在代码中)将UTF-16映射到UCS,同时仍保持很有效的解决方案

这有很少的缺点 - 在UCS中有足够的空间,所以它不像保留这个小块意味着我们将来会有更少的空间用于未来的扩展.

假想

这个位是一个明智的猜测.您可以进行研究以找出在哪个版本的Unicode中使用了哪些字符,但我相信这至少是一个合理的解释.

真正的原因正在使用该特定块中是可能的历史-很长一段时间的Unicode真的只有16位,为一切......和人物的上限范围已经被分配(你的计划认为禁地的部分).通过获取先前未分配的2048个值的块,将所有先前有效的UCS-2序列保留为具有相同含义的有效UTF-16序列,同时将UCS范围扩展到BMP之外.如果范围是0xF800-0xFFFF,某些方面可能会更容易,但到那时为时已晚.