unicodedata — Unicode 数据库


此模块提供对 Unicode 字符数据库 (UCD) 的访问,该数据库定义了所有 Unicode 字符的字符属性。此数据库中包含的数据是从 UCD 15.1.0 版本 编译而来的。

该模块使用与 Unicode 标准附件 #44,“Unicode 字符数据库” 中定义的相同的名称和符号。它定义了以下函数

unicodedata.lookup(name)

按名称查找字符。如果找到具有给定名称的字符,则返回相应的字符。如果未找到,则引发 KeyError

在 3.3 版本中更改: 增加了对名称别名 [1] 和命名序列 [2] 的支持。

unicodedata.name(chr[, default])

返回分配给字符 chr 的名称,以字符串形式返回。 如果没有定义名称,则返回 default,或者,如果没有给出 default,则引发 ValueError

unicodedata.decimal(chr[, default])

返回分配给字符 chr 的十进制值,以整数形式返回。 如果没有定义这样的值,则返回 default,或者,如果没有给出 default,则引发 ValueError

unicodedata.digit(chr[, default])

返回分配给字符 chr 的数字值,以整数形式返回。 如果没有定义这样的值,则返回 default,或者,如果没有给出 default,则引发 ValueError

unicodedata.numeric(chr[, default])

返回分配给字符 chr 的数值,以浮点数形式返回。 如果没有定义这样的值,则返回 default,或者,如果没有给出 default,则引发 ValueError

unicodedata.category(chr)

返回分配给字符 chr 的通用类别,以字符串形式返回。

unicodedata.bidirectional(chr)

返回分配给字符 chr 的双向类,以字符串形式返回。 如果没有定义这样的值,则返回空字符串。

unicodedata.combining(chr)

返回分配给字符 chr 的规范组合类,以整数形式返回。 如果没有定义组合类,则返回 0

unicodedata.east_asian_width(chr)

返回分配给字符 chr 的东亚宽度,以字符串形式返回。

unicodedata.mirrored(chr)

返回分配给字符 chr 的镜像属性,以整数形式返回。 如果该字符在双向文本中被标识为“镜像”字符,则返回 1,否则返回 0

unicodedata.decomposition(chr)

返回分配给字符 chr 的字符分解映射,以字符串形式返回。 如果没有定义这样的映射,则返回空字符串。

unicodedata.normalize(form, unistr)

返回 Unicode 字符串 unistr 的规范化形式 formform 的有效值是 ‘NFC’、‘NFKC’、‘NFD’ 和 ‘NFKD’。

Unicode 标准基于规范等效和兼容性等效的定义,定义了 Unicode 字符串的各种规范化形式。在 Unicode 中,可以使用多种方式表示多个字符。例如,字符 U+00C7(带有 Cedilla 的拉丁大写字母 C)也可以表示为序列 U+0043(拉丁大写字母 C)U+0327(组合 Cedilla)。

对于每个字符,都有两种规范化形式:规范化形式 C 和规范化形式 D。规范化形式 D (NFD) 也称为规范分解,并将每个字符转换为其分解形式。规范化形式 C (NFC) 首先应用规范分解,然后再次组合预组合字符。

除了这两种形式之外,还有两种基于兼容性等效的附加规范化形式。在 Unicode 中,支持某些通常会与其他字符统一的字符。例如,U+2160(罗马数字一)实际上与 U+0049(拉丁大写字母 I)相同。但是,为了与现有字符集(例如 gb2312)兼容,它在 Unicode 中受到支持。

规范化形式 KD (NFKD) 将应用兼容性分解,即将所有兼容性字符替换为它们的等效项。规范化形式 KC (NFKC) 首先应用兼容性分解,然后进行规范组合。

即使两个 Unicode 字符串被规范化并且对人类读者看起来相同,如果一个字符串具有组合字符而另一个没有,它们也可能不比较相等。

unicodedata.is_normalized(form, unistr)

返回 Unicode 字符串 unistr 是否为规范化形式 formform 的有效值是 ‘NFC’、‘NFKC’、‘NFD’ 和 ‘NFKD’。

在 3.8 版本中添加。

此外,该模块公开以下常量

unicodedata.unidata_version

此模块中使用的 Unicode 数据库的版本。

unicodedata.ucd_3_2_0

这是一个对象,它具有与整个模块相同的方法,但使用 Unicode 数据库的 3.2 版本,用于需要此特定版本 Unicode 数据库的应用程序(例如 IDNA)。

示例

>>> import unicodedata
>>> unicodedata.lookup('LEFT CURLY BRACKET')
'{'
>>> unicodedata.name('/')
'SOLIDUS'
>>> unicodedata.decimal('9')
9
>>> unicodedata.decimal('a')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: not a decimal
>>> unicodedata.category('A')  # 'L'etter, 'u'ppercase
'Lu'
>>> unicodedata.bidirectional('\u0660') # 'A'rabic, 'N'umber
'AN'

脚注