unicodedata – Unicode数据库详解(14) – Python语言(必读进阶学习教程)(参考资料)
该模块提供对 Unicode 字符数据库 (UCD) 的访问,该数据库定义了所有 Unicode 字符的字符属性。此数据库中包含的数据是从UCD 版本 11.0.0编译的。
该模块使用 Unicode 标准附件 #44, “Unicode 字符数据库”中定义的相同名称和符号。它定义了以下函数:
nameunicodedata.
lookup
()
- 按名称查找字符。如果找到具有给定名称的字符,则返回相应的字符。如果没有找到,
KeyError
则提出。在 3.3 版更改:添加了对名称别名1和命名序列2的支持。
unicodedata.
chrname(
default[,
])
- 以字符串形式返回分配给字符chr的名称。如果未定义名称,则返回默认值,或者,如果未给出,
ValueError
则引发。
unicodedata.
chrdecimal(
default[,
])
- 以整数形式返回分配给字符chr的十进制值。如果没有定义这样的值,则返回默认值,或者,如果没有给出,
ValueError
则引发。
unicodedata.
chrdigit(
default[,
])
- 以整数形式返回分配给字符chr的数字值。如果没有定义这样的值,则返回默认值,或者,如果没有给出,
ValueError
则引发。
unicodedata.
chrnumeric(
default[,
])
- 以浮点数形式返回分配给字符chr的数值。如果没有定义这样的值,则返回默认值,或者,如果没有给出,
ValueError
则引发。
unicodedata.
chrcategory(
)
- 以字符串形式返回分配给字符chr的一般类别。
unicodedata.
chrbidirectional(
)
- 以字符串形式返回分配给字符chr的双向类。如果没有定义这样的值,则返回一个空字符串。
unicodedata.
combining
( chr )- 以整数形式返回分配给字符chr的规范组合类。如果没有定义组合类,则返回
0
。
unicodedata.
east_asian_width
( chr )- 以字符串形式返回分配给字符chr的东亚宽度。
unicodedata.
chrmirrored(
)
- 以整数形式返回分配给字符chr的镜像属性。如果字符已被识别为双向文本中的“镜像”字符,则返回
1
,否则返回0
。
unicodedata.
chrdecomposition(
)
- 以字符串形式返回分配给字符 chr的字符分解映射。如果没有定义这样的映射,则返回一个空字符串。
unicodedata.
formnormalize(
unistr,
)
- 返回Unicode 字符串unistr的范式。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 字符串被规范化并且对人类读者来说看起来相同,如果一个具有组合字符而另一个没有,它们可能比较不相等。
此外,该模块还公开了以下常量:
unicodedata.
unidata_version
- 此模块中使用的 Unicode 数据库的版本。
unicodedata.
ucd_3_2_0
- 这是一个与整个模块具有相同方法的对象,但使用 Unicode 数据库版本 3.2 代替,用于需要此特定版本的 Unicode 数据库(例如 IDNA)的应用程序。
例子:
>>> import unicodedata >>> unicodedata.lookup('LEFT CURLY BRACKET') '{' >>> unicodedata.name('/') 'SOLIDUS' >>> unicodedata.decimal('9') 9 >>> unicodedata.decimal('a') Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: not a decimal >>> unicodedata.category('A') # 'L'etter, 'u'ppercase 'Lu' >>> unicodedata.bidirectional('\u0660') # 'A'rabic, 'N'umber 'AN'