由Unicode 字符编码模型定义的编码字符集将字符映射到非负整数(例如,拉丁小写字母 A到 97,由传统的 ASCII 和 UCS 组成)。
注意:字符和抽象字符之间存在区别:后者更接近于我们的字符概念,而第一个术语是编码字符集上下文中的概念。一些抽象字符由多个字符表示。维基百科上的 Unicode 文章引用了一个例子:
例如,一个拉丁文小写字母“i”,上面有一个ogonek,上面有一个点,还有一个重音[一个抽象字符],在立陶宛语中是必需的,用字符序列U+012F、U+0307、U+来表示0301.
UCS(Universal Coded Character Set)是国际标准ISO/IEC 10646定义的编码字符集,可以通过这个官方链接下载作为参考。
手头的任务是判断一个给定的非负整数是否被UCS(通用编码字符集)映射到一个字符。
让我们首先考虑未分配字符的非负整数,即使它们实际上是由 UCS 保留的。UCS(第 6.3.1 节,分类,表 1;链接文档的第 19 页)根据对应的基本类型列出了三种可能性:
- 代理(范围 D800–DFFF)
非字符(范围 FDD0–FDEF 加上任何以值 FFFE 或 FFFF 结尾的代码点)
Unicode 标准对非字符的定义如下:
非字符是永久保留的代码点,永远不会分配给它们的字符。
此页面更准确地列出了非字符。
- 保留(我还没有找到属于这个类别的非负整数)
另一方面,基本类型为以下任何一种的代码点:
- 形象的
- 格式
- 控制
- 私人使用
分配给字符。然而,这是可以讨论的。例如,是否应该认为私人使用代码点实际上被分配了任何字符?非常 UCS(第 6.3.5 节,私人使用字符;链接文档的第 20 页)将它们定义为:
本国际标准不以任何方式限制私人使用字符。专用字符可用于提供用户定义的字符。
此外,我想知道 UCS 映射或保留的非负整数的范围。最大值是多少?在某些页面中,我发现 UCS 映射的整个非负整数范围是 – 大概 – 0–0x10FFFF。这是真的?
理想情况下,这些信息将以可以构建算法的机器可读格式公开提供。是偶然的吗?
为清楚起见:我需要的是一个函数,它以非负整数作为参数并返回它是否被 UCS 映射到字符。此外,我更希望它基于官方的、机器可读的信息。要回答这个问题,只要指出一个我可以自己构建函数的资源就足够了。