0

由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 映射到字符。此外,我更希望它基于官方的、机器可读的信息。要回答这个问题,只要指出一个我可以自己构建函数的资源就足够了。

4

1 回答 1

2

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

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

于 2016-03-26T04:25:40.893 回答