由Unicode Character Encoding Model定义的编码字符集将字符映射到非负整数(例如 LATIN SMALL LETTER A 到97,两者都是传统的ASCII和UCS)。
注意:字符和抽象字符之间存在差异:后一个术语更接近于我们的角色概念,而第一个概念是在上下文中的概念编码字符集。一些抽象字符由多个字符表示。 The Unicode article at Wikipedia引用了一个例子:
例如,拉丁文小写字母“i”带有ogonek,上面有一个点,和 一种尖锐的重音[一个抽象的角色],这是必需的 立陶宛语,由字符序列U + 012F,U + 0307表示, U + 0301。
UCS(通用编码字符集)是由国际标准ISO / IEC 10646定义的编码字符集,可供参考,可通过this official link下载。
手头的任务是判断一个给定的非负整数是否被UCS , the Universal Coded Character Set映射到一个字符。
让我们首先考虑未分配字符的非负整数,即使它们实际上是由UCS保留的。 UCS(第6.3.1节,分类,表1;链接文档的第19页)根据与它们对应的基本类型列出了三种可能性:
非字符(范围FDD0-FDEF加上以值FFFE或FFFF结尾的任何代码点)
Unicode标准定义非字符,如下所示:
非字符是永久保留的代码点 永远不会分配给他们的字符。
This page更精确地列出了非字符。
另一方面,基本类型的代码点是以下任何一个:
分配给字符。但是,这可以讨论。例如,私有使用代码点是否应被视为实际分配任何字符?非常UCS(第6.3.5节,私人使用字符;链接文档的第20页)将它们定义为:
私人使用字符不受任何限制 国际标准。私人使用字符可用于提供 用户定义的字符。
此外,我想知道UCS映射或保留的非负整数的范围。什么是最大值?在某些页面中,我发现UCS映射的整个非负整数范围是 - 0-0x10FFFF。这是真的吗?
理想情况下,这些信息将以机器可读的格式公开提供,人们可以在其上构建算法。是偶然吗?
为清楚起见:我需要的是一个以非负整数作为参数的函数,并返回它是否由UCS映射到一个字符。 另外,我希望它基于官方的机器可读信息。要回答这个问题,只需指出一个这样的资源,我就可以自己构建这个函数了。
答案 0 :(得分:2)
unicode.org网站上的Unicode字符数据库(UCD)为available;它肯定是机器可读的。它包含所有已分配字符的列表。 (当然,对于每个新版本的Unicode,分配的代码点集都会更大。)构成UCD的各种文件的完整文档也从UCD页面链接。
正如您所怀疑的那样,潜在代码范围为0-0x10FFFF。其中,非字符和代理块永远不会被指定为任何字符的代码点。私人使用区域中的代码只能通过应用程序之间的相互协议分配给字符;它们永远不会被Unicode本身分配给字符。任何其他代码可能是。