# `unicodedata` --- Unicode 数据库

此模块提供了对 Unicode Character Database (UCD) 的访问，其中定义了所有 Unicode 字符的字符属性。 此数据库中包含的数据编译自 UCD 版本 16.0.0。

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

参见

有关 Unicode 以及如何使用此模块的更多信息，请参阅 Unicode 指南。

unicodedata.lookup(name)

  按名称查找字符。如果找到具有给定名称的字符，则返回相应的字符。 如果没有找到，则引发 `KeyError`。例如:

      >>> unicodedata.lookup('LEFT CURLY BRACKET')
      '{'

  此函数返回的字符与字符串字面值中 `\N` 转义序列生成的字符相同。例如:

      >>> unicodedata.lookup('MIDDLE DOT') == '\N{MIDDLE DOT}'
      True

  在 3.3 版本发生变更: 已添加对名称别名 [1] 和命名序列 [2] 的支持。

unicodedata.name(chr, default=None, /)

  返回分配给字符 chr 的名称（字符串形式）。如果未定义名称，则返回 default；如果未指定 default，则会引发 `ValueError`。例如:

      >>> unicodedata.name('½')
      'VULGAR FRACTION ONE HALF'
      >>> unicodedata.name('\uFFFF', 'fallback')
      'fallback'

unicodedata.decimal(chr, default=None, /)

  返回分配给字符 chr 的十进制值作为整数。 如果没有定义这样的值，则返回 default ，如果没有给出，则 `ValueError` 被引发。例如:

      >>> unicodedata.decimal('\N{ARABIC-INDIC DIGIT NINE}')
      9
      >>> unicodedata.decimal('\N{SUPERSCRIPT NINE}', -1)
      -1

unicodedata.digit(chr, default=None, /)

  返回分配给字符 chr 的数字值作为整数。 如果没有定义这样的值，则返回 default ，如果没有给出，则引发 `ValueError`:

      >>> unicodedata.digit('\N{SUPERSCRIPT NINE}')
      9

unicodedata.numeric(chr, default=None, /)

  返回分配给字符 chr 的数值作为浮点数。 如果没有定义这样的值，则返回 default ，如果没有给出，则引发 `ValueError`

      >>> unicodedata.numeric('½')
      0.5

unicodedata.category(chr)

  返回分配给字符 chr 的通用类别（字符串形式）。通用类别名称由两个字母组成。有关类别代码的列表，请参阅 Unicode 字符数据库文档的“通用类别值”部分。例如:

      >>> unicodedata.category('A')  # 'L'etter, 'u'ppercase
      'Lu'

unicodedata.bidirectional(chr)

  返回分配给字符 chr 的双向类，以字符串形式表示。如果未定义该值，则返回空字符串。有关双向代码的列表，请参阅 Unicode 字符数据库的双向类值部分 文档。例如:

      >>> unicodedata.bidirectional('\N{ARABIC-INDIC DIGIT SEVEN}') # 'A'rabic, 'N'umber
      'AN'

unicodedata.combining(chr)

  返回分配给字符 chr 的以整数表示的规范组合类。 如果未定义组合类则返回 `0`。 请参阅 Unicode 字符数据库的规范组合类值章节 了解详情。

unicodedata.east_asian_width(chr)

  返回分配给字符 chr 的东亚宽度，以字符串形式表示。有关宽度列表和更多信息，请参阅 Unicode 标准附件 #11。

unicodedata.mirrored(chr)

  返回分配给字符 chr 的镜像属性为整数。如果字符在双向文本中被识别为“镜像”字符，则返回 `1` ，否则返回 `0` 。例如:

      >>> unicodedata.mirrored('>')
      1

unicodedata.decomposition(chr)

  返回分配给字符 chr 的字符分解映射作为字符串。如果未定义此类映射，则返回空字符串。例如:

      >>> unicodedata.decomposition('Ã')
      '0041 0303'

unicodedata.normalize(form, unistr)

  返回 Unicode 字符串 unistr 的正规形式 form 。 form 的有效值为 'NFC' 、 'NFKC' 、 'NFD' 和 'NFKD' 。

  Unicode 标准基于规范等价和兼容性等效的定义定义了 Unicode 字符串的各种规范化形式。在 Unicode 中，可以以各种方式表示多个字符。 例如，字符 U+00C7 （带有 CEDILLA 的 LATIN CAPITAL LETTER C ）也可以表示为序列 U+0043（ LATIN CAPITAL LETTER C ）U+0327（ COMBINING CEDILLA ）。

  对于每个字符，有两种正规形式：正规形式 C 和正规形式 D 。正规形式D（NFD）也称为规范分解，并将每个字符转换为其分解形式。 正规形式C（NFC）首先应用规范分解，然后再次组合预组合字符。

  除了这两种形式之外，还有两种基于兼容性等效的其他正规形式。 在 Unicode 中，支持某些通常会与其他字符统一的字符。 例如， U+2160（ROMAN NUMERAL ONE）与 U+0049（LATIN CAPITAL LETTER I）实际上是相同的。 但是，为了与现有字符集（例如 gb2312 ）兼容，Unicode 仍然支持它。

  正规形式KD（NFKD）将应用兼容性分解，也就是用其等价项替换所有兼容性字符。 正规形式KC（NFKC）首先应用兼容性分解，然后是规范组合。

  即使两个 unicode 字符串被规范化并且人类读者看起来相同，如果一个具有组合字符而另一个没有，则它们可能无法相等。

unicodedata.is_normalized(form, unistr)

  判断 Unicode 字符串 unistr 是否为正规形式 form。 form 的有效值为 'NFC', 'NFKC', 'NFD' 和 'NFKD'。

  Added in version 3.8.

此外，该模块暴露了以下常量：

unicodedata.unidata_version

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

unicodedata.ucd_3_2_0

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

备注

[1]

https://www.unicode.org/Public/16.0.0/ucd/NameAliases.txt

[2]

https://www.unicode.org/Public/16.0.0/ucd/NamedSequences.txt