unicodedata — Unicode 数据库


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

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

  • unicodedata. lookup(* name *)
    • pass名称查找字符。如果找到具有给定名称的字符,则返回相应的字符。如果找不到,则引发KeyError

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

  • unicodedata. name(* chr * [,* default *])

    • 以字符串形式返回分配给字符* chr 的名称。如果未定义名称,则返回 default *;如果未指定名称,则引发ValueError
  • unicodedata. decimal(* chr * [,* default *])

    • 以整数形式返回分配给字符* chr 的十进制值。如果未定义此类值,则返回 default *;如果未指定,则引发ValueError
  • unicodedata. digit(* chr * [,* default *])

    • 以整数形式返回分配给字符* chr 的数字值。如果未定义此类值,则返回 default *;如果未指定,则引发ValueError
  • unicodedata. numeric(* chr * [,* default *])

    • 返回以浮点数形式分配给字符* chr 的数值。如果未定义此类值,则返回 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 *的字符分解 Map。如果未定义此类 Map,则返回一个空字符串。
  • unicodedata. normalize(* form unistr *)

    • 返回 Unicode 字符串* unistr 的普通形式 form *。 * form *的有效值为'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(罗马数字 ONE)与 U 0049(拉丁文大写字母 I)实际上是同一回事。但是,Unicode 支持它以与现有字符集(例如 gb2312)兼容。

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

即使将两个 unicode 字符串归一化并在人类 Reader 看来是相同的,但如果一个字符串包含组合字符而另一个字符串没有组合,则它们可能不相等。

  • unicodedata. is_normalized(* form unistr *)
    • 返回 Unicode 字符串* unistr 是否采用正常形式 form *。 * form *的有效值为'NFC','NFKC','NFD'和'NFKD'。

3.8 版的新Function。

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

  • unicodedata. unidata_version

    • 此模块中使用的 Unicode 数据库版本。
  • unicodedata. ucd_3_2_0

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

Examples:

>>> 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'

Footnotes