哪些非负整数未在 UCS 中分配字符?

Which nonnegative integers aren't assigned a character in the UCS?

编码字符集,由 Unicode Character Encoding Model 定义,将字符映射到非负整数(例如 LATIN SMALL LETTER A到 97,传统的 ASCII 和 UCS)。

注意:字符抽象字符是有区别的:后者更接近于我们对字符的概念,而首先是编码字符集上下文中的概念。一些抽象字符由多个字符表示。 The Unicode article at Wikipedia 举个例子:

For example, a Latin small letter "i" with an ogonek, a dot above, and an acute accent [an abstract character], which is required in Lithuanian, is represented by the character sequence U+012F, U+0307, U+0301.

UCS(Universal Coded Character Set)是国际标准ISO/IEC10646定义的编码字符集,可通过this official link.

下载参考。

手头的任务是判断给定的非负整数是否通过 UCS, the Universal Coded Character Set.

映射到字符

让我们首先考虑未分配字符的非负整数,即使它们实际上由 UCS 保留。 UCS(§ 6.3.1,分类,Table 1;链接文档的第 19 页)列出了三种可能性,基于 基本类型 对应的是:

另一方面,基本类型是以下任何一种的代码点:

分配给角色。然而,这是可以讨论的。例如,是否应该将 private use 代码点视为实际分配了任何字符?非常 UCS(§ 6.3.5,私人使用字符;链接文档的第 20 页)将它们定义为:

Private use characters are not constrained in any way by this International Standard. Private use characters can be used to provide user-defined characters.

另外,我想知道UCS映射或保留的非负整数的范围。最大值是多少?在某些页面中,我发现 UCS 映射的整个非负整数范围大概是 0-0x10FFFF。这是真的吗?

理想情况下,这些信息将以机器可读的格式公开提供,人们可以以此为基础构建算法。是偶然吗?


为了清楚起见:我需要的是一个函数,它接受一个非负整数作为参数,returns它是否被 UCS 映射到一个字符。 另外,我希望它基于官方的、机器可读的信息。要回答这个问题,只要指向一个这样的资源就足够了,我可以自己在其上构建函数。

Unicode 字符数据库 (UCD) 在 unicode.org 站点上 available;它当然是机器可读的。它包含所有已分配字符的列表。 (当然,每个新版本的 Unicode 分配的代码点集都更大。)关于构成 UCD 的各种文件的完整文档也从 UCD 页面链接。

如您所料,潜在代码的范围是 0-0x10FFFF。其中,非字符和代理块永远不会作为代码点分配给任何字符。私人使用区域的代码只能通过应用程序之间的相互协议分配给字符;它们永远不会被 Unicode 本身分配给字符。任何其他代码都可能是。