7.9. unicodedata — Unicode 数据库 — Python 文档

来自菜鸟教程
Python/docs/2.7/library/unicodedata
跳转至:导航、​搜索

7.9. 单码数据 — Unicode 数据库

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

该模块使用与 UnicodeData 文件格式 5.2.0 定义的相同的名称和符号(参见 https://www.unicode.org/reports/tr44/)。 它定义了以下函数:

unicodedata.lookup(name)
按名称查找字符。 如果找到具有给定名称的字符,则返回相应的 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 版中的新功能。

unicodedata.mirrored(unichr)
以整数形式返回分配给 Unicode 字符 unichr 的镜像属性。 如果字符已被标识为双向文本中的“镜像”字符,则返回 1,否则返回 0。
unicodedata.decomposition(unichr)
以字符串形式返回分配给 Unicode 字符 unichr 的字符分解映射。 如果未定义此类映射,则返回空字符串。
unicodedata.normalize(form, unistr)

返回 Unicode 字符串 unistr 的标准形式 form。 form 的有效值为“NFC”、“NFKC”、“NFD”和“NFKD”。

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

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

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

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

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

2.3 版中的新功能。

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

unicodedata.unidata_version

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

2.3 版中的新功能。

unicodedata.ucd_3_2_0

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

2.5 版中的新功能。

例子:

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