unicodedata
unicodedata - Unicode数据库
此模块提供对Unicode字符数据库的访问,该字符数据库为所有Unicode字符定义字符属性。该数据库中的数据基于UnicodeData.txt
可从ftp://ftp.unicode.org/公开获得的文件版本5.2.0。
该模块使用与Unicode数据文件格式5.2.0(见http://www.unicode.org/reports/tr44/tr44-4.html)中定义的相同的名称和符号。它定义了以下功能:
unicodedata.lookup(name)
按名称查找字符。如果找到具有给定名称的字符,则返回相应的Unicode字符。如果没有找到,则提出KeyError
。
unicodedata.name(unichr[, default])
以字符串形式返回分配给Unicode字符unichr
的名称。如果没有定义名称,则返回默认值
,否则引发ValueError
。
unicodedata.decimal(unichr[, default])
以整数形式返回分配给Unicode字符unichr的十进制值。 如果没有定义这样的值,则返回缺省值,否则会引发ValueError。
unicodedata.digit(unichr[, default])
以整数形式返回分配给Unicode字符unichr的数字值。 如果没有定义这样的值,则返回缺省值,否则会引发ValueError。
unicodedata.numeric(unichr[, default])
以float形式返回分配给Unicode字符unichr的数字值。 如果没有定义这样的值,则返回缺省值,否则会引发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
的常规表单形式
。表单的
有效值为'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(ROMAN NUMERAL ONE)与U + 0049(拉丁大写字母I)确实是相同的东西。但是,Unicode支持与现有字符集兼容(例如gb2312)。
标准格式KD(NFKD)将应用兼容性分解,即将所有兼容性字符替换为它们的等价物。标准形式KC(NFKC)首先应用兼容性分解,然后是规范组合。
即使两个unicode字符串被标准化,并且与人类阅读器看起来相同,如果一个字符组合了字符而另一个字符串没有,它们可能不会相等。
2.3版本的新功能。
另外,该模块公开以下常量:
unicodedata.unidata_version
此模块中使用的Unicode数据库的版本。
2.3版本的新功能。
unicodedata.ucd_3_2_0
这是一个与整个模块具有相同方法的对象,但对于需要此特定版本的Unicode数据库(如IDNA)的应用程序,则使用Unicode数据库版本3.2。
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 ?
ValueError: not a decimal
>>> unicodedata.category(u'A') # 'L'etter, 'u'ppercase
'Lu'
>>> unicodedata.bidirectional(u'\u0660') # 'A'rabic, 'N'umber
'AN'