din*_*wat 5 unicode range codepoint character-encoding
为什么最大Unicode代码点限制为0x10FFFF?是否可以通过UTF-16,UTF-8等任何编码方案在此代码点上方表示Unicode(例如0x10FFFF + 0x000001 = 0x110000)?
这是因为UTF-16。字符的BMP的外使用的是表示代理对在UTF-16与第一码单元谎言之间0xD800-0xDBFF之间的第二个0xDC00-0xDFFF。每个CU代表代码点的10位,从而允许总共20位的数据(0x100000字符)被划分为16个平面(16×2 16个字符)。剩余的BMP将代表0x10000个字符(代码点0–0xFFFF)
因此,字符总数为0x100000 + 0x10000 = 0x110000,这允许从0到0x110000-1 = 0x10FFFF的代码点。或者,可以这样计算最后一个可表示的代码点:BMP中的代码点的范围为0-0xFFFF,因此使用代理对编码的字符的偏移量为0xFFFF +1 = 0x10000,这表示最后一个代码点为代理对表示为0xFFFFF + 0x10000 = 0x10FFFF
这是通过保证Unicode字符编码稳定的政策上面,一个代码点会不会被分配
General_Category属性值Surrogate(Cs)是不可变的:具有该值的代码点集永远不会改变。
从历史上看,UTF-8 最多允许使用6个字节的U + 7FFFFFFF,而UTF-32可以存储两倍的数字。但是,由于UTF-16中的限制,Unicode委员会已决定UTF-8的长度不得超过4个字节,从而导致与UTF-16的范围相同
2003年11月,RFC 3629对UTF-8进行了限制,以匹配UTF-16字符编码的约束条件:明确禁止与高和低代理字符相对应的代码点删除超过3%的三字节序列,并以在U + 10FFFF处,删除了48%以上的四字节序列以及所有五字节和六字节序列。
同样适用于UTF-32
2003年11月,RFC 3629对Unicode进行了限制,以匹配UTF-16编码的约束:明确禁止大于U + 10FFFF的代码点(以及通过U + DFFF的高低代换U + D800)。这个有限的子集定义了UTF-32
您可以阅读此更详细的答案,
| 归档时间: |
|
| 查看次数: |
743 次 |
| 最近记录: |