7.9. unicodedata — Unicode 数据库

此模块提供对 Unicode 字符数据库的访问,该数据库定义了所有 Unicode 字符的字符属性。此数据库中的数据基于UnicodeData.txt文件版本 5.2.0(可从ftp://ftp.unicode.org/公开获得)。

该模块使用与 UnicodeData File Format 5.2.0(请参见https://www.unicode.org/reports/tr44/)定义的相同的名称和符号。它定义了以下Function:

  • unicodedata. lookup(* name *)

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

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

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

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

    • 以浮点数返回分配给 Unicode 字符* unichr 的数值。如果未定义此类值,则返回 default *;如果未指定,则引发ValueError
  • unicodedata. category(* unichr *)

    • 以字符串形式返回分配给 Unicode 字符* unichr *的常规类别。
  • unicodedata. bidirectional(* unichr *)

    • 返回作为字符串分配给 Unicode 字符* unichr *的双向类。如果未定义此类值,则返回一个空字符串。
  • unicodedata. combining(* unichr *)

    • 以整数形式返回分配给 Unicode 字符* unichr *的规范化组合类。如果未定义组合类,则返回0
  • unicodedata. east_asian_width(* unichr *)

    • 以字符串形式返回分配给 Unicode 字符* unichr *的东亚宽度。

2.4 版的新Function。

  • unicodedata. mirrored(* unichr *)

    • 以整数形式返回分配给 Unicode 字符* unichr *的镜像属性。如果该字符已被识别为双向文本中的“镜像”字符,则返回1,否则返回0
  • unicodedata. decomposition(* unichr *)

    • 返回作为字符串分配给 Unicode 字符* unichr *的字符分解 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 看来是相同的,但如果一个字符串包含组合字符而另一个字符串没有组合,则它们可能不相等。

2.3 版的新Function。

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

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

2.3 版的新Function。

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

2.5 版的新Function。

Examples:

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