Unicode 如何选择替代区域(UTF-16)的位置?

Unicode 如何选择替代区域(UTF-16)的位置?,unicode,utf-16,Unicode,Utf 16,UTF-16代理区域(U+D800..U+DFFF)的位置是随机选择的,还是有某种逻辑原因,即它在这里?代理区域是在Unicode 2.0中添加的,以将代码扩展到65536个代码点之外,同时保留与现有16位表示的兼容性。为了对表示1048576个新代码点所需的20位进行编码,他们使用1024个字符表示前10位,1024个字符表示后10位(他们使用2048个字符而不是1024个字符来允许代码自同步)。为了提高识别字符的效率,最好所有2048个字符共享一个(二进制)前缀 我只能猜测,他们想把这个不同

UTF-16代理区域(U+D800..U+DFFF)的位置是随机选择的,还是有某种逻辑原因,即它在这里?

代理区域是在Unicode 2.0中添加的,以将代码扩展到65536个代码点之外,同时保留与现有16位表示的兼容性。为了对表示1048576个新代码点所需的20位进行编码,他们使用1024个字符表示前10位,1024个字符表示后10位(他们使用2048个字符而不是1024个字符来允许代码自同步)。为了提高识别字符的效率,最好所有2048个字符共享一个(二进制)前缀


我只能猜测,他们想把这个不同寻常的块推到更高而不是更低的代码点。块0xE000–0xE7FF、0xE800–0xEFFF和0xF000–0xF7FF已保留用于“专用”区域,0xF800–0xFFFF也部分保留用于专用,部分用于其他代码。因此,0xD800–0xDFFF将是可用的最高块。

Unicode最初设计为16位代码,在认识到需要“补充平面”之前就已经分配了。最大的可用块是U+A000–U+DFFF,因此代理必须到其中的某个位置。

他们可以很容易地进入U+2800–U+2FF、U+3800–U+3FFF或U+4000–U+47FF。他们这样做将BMP整齐地划分为“普通”字符U+0000–U+D7FF和“特殊”字符(代理、专用、兼容字符和非字符)U+D800-U+FFFF。您可能会在上找到一些有趣的观察结果。