unicodedata
— Unicode 数据库¶
此模块提供对 Unicode 字符数据库 (UCD) 的访问,该数据库定义了所有 Unicode 字符的字符属性。此数据库中包含的数据是从 UCD 版本 16.0.0 编译而来的。
该模块使用与 Unicode 标准附件 #44,“Unicode 字符数据库”中定义的相同的名称和符号。它定义了以下函数
参见
Unicode HOWTO 了解有关 Unicode 以及如何使用此模块的更多信息。
- unicodedata.lookup(name)¶
按名称查找字符。如果找到具有给定名称的字符,则返回相应的字符。如果未找到,则会引发
KeyError
。例如>>> unicodedata.lookup('LEFT CURLY BRACKET') '{'
此函数返回的字符与字符串字面量中
\N
转义序列产生的字符相同。例如>>> unicodedata.lookup('MIDDLE DOT') == '\N{MIDDLE DOT}' True
- 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,如果未给出 default,则引发
ValueError
。例如>>> unicodedata.decimal('\N{ARABIC-INDIC DIGIT NINE}') 9 >>> unicodedata.decimal('\N{SUPERSCRIPT NINE}', -1) -1
- unicodedata.digit(chr, default=None, /)¶
以整数形式返回分配给字符 chr 的数字值。如果未定义此类值,则返回 default,如果未给出 default,则引发
ValueError
>>> unicodedata.digit('\N{SUPERSCRIPT NINE}') 9
- unicodedata.numeric(chr, default=None, /)¶
以浮点数形式返回分配给字符 chr 的数值。如果未定义此类值,则返回 default,如果未给出 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 的拉丁大写字母 C) 也可以表示为序列 U+0043 (拉丁大写字母 C) U+0327 (组合 CEDILLA)。
对于每个字符,有两种规范形式:规范形式 C 和规范形式 D。规范形式 D (NFD) 也称为规范分解,它将每个字符转换为其分解形式。规范形式 C (NFC) 首先应用规范分解,然后再次组合预组合字符。
除了这两种形式之外,还有两种基于兼容性等价的附加规范形式。在 Unicode 中,支持某些通常会与其他字符统一的字符。例如,U+2160 (罗马数字一) 实际上与 U+0049 (拉丁大写字母 I) 相同。但是,为了与现有字符集 (例如 gb2312) 兼容,Unicode 中支持它。
规范形式 KD (NFKD) 将应用兼容性分解,即将所有兼容性字符替换为其等效字符。规范形式 KC (NFKC) 首先应用兼容性分解,然后进行规范组合。
即使两个 unicode 字符串经过规范化并且人类读者看起来相同,如果一个包含组合字符而另一个不包含,它们也可能无法比较相等。
- unicodedata.is_normalized(form, unistr)¶
返回 Unicode 字符串 unistr 是否处于规范形式 form。form 的有效值为 'NFC'、'NFKC'、'NFD' 和 'NFKD'。
在 3.8 版本加入。
此外,该模块还公开了以下常量
- unicodedata.unidata_version¶
此模块中使用的 Unicode 数据库的版本。
- unicodedata.ucd_3_2_0¶
这是一个与整个模块具有相同方法的对象,但使用 Unicode 数据库版本 3.2,适用于需要此特定版本 Unicode 数据库的应用程序(例如 IDNA)。
脚注