On this page
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
。
- 以整数形式返回分配给 Unicode 字符* unichr *的规范化组合类。如果未定义组合类,则返回
unicodedata.
east_asian_width
(* unichr *)- 以字符串形式返回分配给 Unicode 字符* unichr *的东亚宽度。
2.4 版的新Function。
unicodedata.
mirrored
(* unichr *)- 以整数形式返回分配给 Unicode 字符* unichr *的镜像属性。如果该字符已被识别为双向文本中的“镜像”字符,则返回
1
,否则返回0
。
- 以整数形式返回分配给 Unicode 字符* unichr *的镜像属性。如果该字符已被识别为双向文本中的“镜像”字符,则返回
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'