unicodedata ---Unicode数据库


此模块提供对Unicode字符数据库(UCD)的访问,该数据库定义所有Unicode字符的字符属性。此数据库中包含的数据是从 UCD version 13.0.0 .

模块使用的名称和符号与Unicode标准附件44所定义的相同, "Unicode Character Database" . 它定义了以下功能:

unicodedata.lookup(name)

按名称查找字符。如果找到具有给定名称的字符,则返回相应的字符。如果找不到, KeyError 提高了。

在 3.3 版更改: 支持名称别名 1 和命名序列 2 已被添加。

unicodedata.name(chr[, default])

返回分配给字符的名称 chr 作为字符串。如果没有定义名称, default 被退回,或者,如果没有给予, ValueError 提高了。

unicodedata.decimal(chr[, default])

返回分配给字符的十进制值 chr 作为整数。如果未定义此类值, default 被退回,或者,如果没有给予, ValueError 提高了。

unicodedata.digit(chr[, default])

返回分配给字符的数字值 chr 作为整数。如果未定义此类值, default 被退回,或者,如果没有给予, ValueError 提高了。

unicodedata.numeric(chr[, default])

返回分配给字符的数值 chr 就像漂浮一样。如果未定义此类值, default 被退回,或者,如果没有给予, 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)

返回正常形式 form 对于Unicode字符串 UNISTR . 的有效值 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)相同。但是,为了与现有字符集(如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数据库(如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 <module>
ValueError: not a decimal
>>> unicodedata.category('A')  # 'L'etter, 'u'ppercase
'Lu'
>>> unicodedata.bidirectional('\u0660') # 'A'rabic, 'N'umber
'AN'

脚注

1

https://www.unicode.org/Public/13.0.0/ucd/NameAliases.txt

2

https://www.unicode.org/Public/13.0.0/ucd/NamedSequences.txt