Unicode是否具有已定义的最大代码点数?

11 unicode utf-8 utf-16 codepoint utf-32

我已经阅读了很多文章,以便知道Unicode代码点的最大数量是多少,但我没有找到最终答案.

据我所知,Unicode代码点被最小化,使得所有UTF-8 UTF-16和UTF-32编码都能够处理相同数量的代码点.但是这个代码点的数量是多少?

我遇到的最常见的答案是Unicode代码点在0x000000到0x10FFFF(1,114,112代码点)的范围内,但我还在其他地方读过它是1,112,114个代码点.那么要给出一个数字还是比这更复杂的问题?

Jon*_*ler 26

Unicode中的最大有效代码点是U + 10FFFF,这使得它成为21位代码集(但并非所有21位整数都是有效的Unicode代码点;特别是0x110000到0x1FFFFF的值不是有效的Unicode代码点).

这是数字1,114,112来自:U + 0000 .. U + 10FFFF是1,114,112个值.

但是,还有一组代码点是UTF-16的代理.它们在U + D800 .. U + DFFF范围内.这是为UTF-16保留的2048个代码点.

1,114,112 - 2,048 = 1,112,064

还有66个非角色.这些部分在勘误表#9中定义:形式为U + nFFFE和U + nFFFF 的值(其中n是值0x00000,0x10000,...... 0xF0000,0x100000),以及32个值U + FDD0-U + FDEF.减去这些也会产生1,111,998个可分配字符.有三个范围保留用于"私人使用":U + E000 .. U + F8FF,U + F0000 .. U + FFFFD,以及U + 100000 .. U + 10FFFD.实际分配的值的数量取决于您正在查看的Unicode的版本.您可以在Unicode Consortium中找到有关最新版本的信息.除此之外,那里的介绍说:

Unicode标准版本7.0包含112,956个字符

因此,只分配了大约10%的可用代码点.

我无法解释为什么你发现1,112,114作为代码点的数量.

顺便提一下,选择上限U + 10FFFF,以便Unicode中的所有值都可以用UTF-16中的一个或两个2字节编码单位表示,使用一个高代理和一个低代理来表示BMP或Basic之外的值.多语言平面,范围U + 0000 .. U + FFFF.

  • 1,112,114看起来像一个错字,它是000000..10FFFF计数与2和4转置. (2认同)