6.5. unicodedata
- Unicode数据库¶
此模块提供对Unicode字符数据库(UCD)的访问,该字符数据库定义所有Unicode字符的字符属性。此数据库中包含的数据是从UCD版本8.0.0编译的。
该模块使用与Unicode标准附录#44,“Unicode字符数据库”定义的名称和符号相同的名称和符号。它定义了以下功能:
unicodedata.
name
(chr[, default])¶返回分配给字符chr的名称作为字符串。按字符来查找它的名称。如果未定义名称,则返回默认,如果未指定,则会引发
ValueError
。
unicodedata.
decimal
(chr[, default])¶将分配给字符chr的十进制值作为整数返回。如果没有定义这样的值,则返回默认,或者如果没有给出,则引发
ValueError
。
unicodedata.
digit
(chr[, default])¶将分配给字符chr的数字值作为整数返回。如果没有定义这样的值,则返回默认,或者如果没有给出,则引发
ValueError
。
unicodedata.
numeric
(chr[, default])¶返回分配给字符chr的数值为float。如果没有定义这样的值,则返回默认,或者如果没有给出,则引发
ValueError
。
unicodedata.
category
(chr)¶将分配给字符chr的一般类别返回为字符串。
unicodedata.
bidirectional
(chr)¶以字符串形式返回分配给字符chr的双向类。如果没有定义这样的值,则返回一个空字符串。
unicodedata.
combining
(chr)¶返回分配给字符chr的规范组合类作为整数。如果未定义组合类,则返回
0
。
unicodedata.
east_asian_width
(chr)¶将分配给字符chr的东亚宽度返回为字符串。
unicodedata.
mirrored
(chr)¶将分配给字符chr的镜像属性返回为整数。如果字符在双向文本中被识别为“镜像”字符,则返回
1
,否则返回0
。
unicodedata.
decomposition
(chr)¶以字符串形式返回分配给字符chr的字符分解映射。如果未定义此类映射,则返回空字符串。
unicodedata.
normalize
(form, unistr)¶返回Unicode字符串unistr的form规范形式。form的有效值有“NFC”、“NFKC”、“NFD”和“NFKD”。
Unicode标准基于标准性等价和兼容性等价的定义来定义Unicode字符串的各种规范化形式。在Unicode中,有几个字符可以用多种方式表示。例如,字符U+00C7(带有下变音符的大写拉丁字母C)也可以表示为序列U+0043(大写拉丁字母C)U+0327(和下变音符)。
对于每个字符,有两种规范形式:规范形式C和规范形式D。规范形式D(NFD)也称为标准性分解,将每个字符转换为其分解形式。规范形式C(NFC)首先应用标准性分解,然后再次组合可以组合的字符。
除了这两种形式,还有两种额外的规范形式,基于兼容性等价。在Unicode中,支持某些字符,通常与其他字符统一。例如,U+2160(罗马数字1)与U+0049(拉丁大写字母I)事实上一模一样。但是,Unicode都支持它们以兼容现有的字符集(例如gb2312)。
规范形式KD(NFKD)将应用兼容性分解,即用兼容的等同字符替换所有字符。规范形式KC(NFKC)首先应用兼容性分解,随后应用标准性组合。
即使两个unicode字符串被规范化并且对人类读者看起来相同,但是如果一个具有组合字符而另一个没有,它们也可能不会相等。
此外,模块还会显示以下常量:
unicodedata.
unidata_version
¶此模块中使用的Unicode数据库的版本。
unicodedata.
ucd_3_2_0
¶这是一个与整个模块具有相同方法的对象,但对于需要此特定版本的Unicode数据库(例如IDNA)的应用程序,则使用Unicode数据库版本3.2。
例子:
>>> 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 ?
ValueError: not a decimal
>>> unicodedata.category('A') # 'L'etter, 'u'ppercase
'Lu'
>>> unicodedata.bidirectional('\u0660') # 'A'rabic, 'N'umber
'AN'
脚注
[1] | http://www.unicode.org/Public/8.0.0/ucd/NameAliases.txt |
[2] | http://www.unicode.org/Public/8.0.0/ucd/NamedSequences.txt |