UTF-16代理区域(U + D800..U + DFFF)的位置是随机选择还是有一些逻辑上的原因,它是在这个地方?
答案 0 :(得分:6)
在Unicode 2.0中添加了代理区域,以将代码扩展到65536个代码点,同时保持与现有16位表示的兼容性。为了对表示1048576个新代码点所需的20位进行编码,它们用1024个字符表示前10位,1024用来表示后10位(它们使用2048个字符而不是1024个以允许代码自同步) 。为了有效识别字符,最好是所有2048共享(二进制)前缀。
我只能猜测他们想要将这个异常目的的块推到更高而不是更低的代码点。块0xE000-0xE7FF,0xE800-0xEFFF和0xF000-0xF7FF已经为“私有使用”区域保留,0xF800-0xFFFF也部分保留供私人使用,部分用于其他代码。因此,0xD800-0xDFFF将是可用的最高区块。
答案 1 :(得分:2)
Unicode最初被设计为16位代码,并且在确认需要“补充平面”之前已经分配了a bunch of characters。最大的可用区块是U + A000 - U + DFFF,所以代理人必须去那里的某个地方。