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 的标准形式 formform 的有效值为“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'