unicodedata --- Unicode 數(shù)據(jù)庫(kù)?


此模塊提供對(duì) Unicode 字符數(shù)據(jù)庫(kù)(UCD)的訪問,該數(shù)據(jù)庫(kù)定義所有 Unicode 字符的字符屬性。此數(shù)據(jù)庫(kù)中包含的數(shù)據(jù)是從 UCD版本11.0.0 編譯的。

該模塊使用與 Unicode 標(biāo)準(zhǔn)附件 #44 “Unicode 字符數(shù)據(jù)庫(kù)” 中所定義的相同名稱和符號(hào)。 它定義了以下函數(shù):

unicodedata.lookup(name)?

按名稱查找字符。如果找到具有給定名稱的字符,則返回相應(yīng)的字符。 如果沒有找到,則 KeyError 被引發(fā)。

在 3.3 版更改: 已添加對(duì)名稱別名 1 和命名序列 2 的支持。

unicodedata.name(chr[, default])?

返回分配給字符 chr 的名稱作為字符串。如果沒有定義名稱,則返回 default ,如果沒有給出,則 ValueError 被引發(fā)。

unicodedata.decimal(chr[, default])?

返回分配給字符 chr 的十進(jìn)制值作為整數(shù)。 如果沒有定義這樣的值,則返回 default ,如果沒有給出,則 ValueError 被引發(fā)。

unicodedata.digit(chr[, default])?

返回分配給字符 chr 的數(shù)字值作為整數(shù)。 如果沒有定義這樣的值,則返回 default ,如果沒有給出,則 ValueError 被引發(fā)。

unicodedata.numeric(chr[, default])?

返回分配給字符 chr 的數(shù)值作為浮點(diǎn)數(shù)。 如果沒有定義這樣的值,則返回 default ,如果沒有給出,則 ValueError 被引發(fā)。

unicodedata.category(chr)?

返回分配給字符 chr 的常規(guī)類別為字符串。

unicodedata.bidirectional(chr)?

返回分配給字符 chr 的雙向類作為字符串。如果未定義此類值,則返回空字符串。

unicodedata.combining(chr)?

返回分配給字符 chr 的規(guī)范組合類作為整數(shù)。如果沒有定義組合類,則返回 0

unicodedata.east_asian_width(chr)?

返回分配給字符 chr 的東亞寬度作為字符串。

unicodedata.mirrored(chr)?

返回分配給字符 chr 的鏡像屬性為整數(shù)。如果字符在雙向文本中被識(shí)別為“鏡像”字符,則返回 1 ,否則返回 0

unicodedata.decomposition(chr)?

返回分配給字符 chr 的字符分解映射作為字符串。如果未定義此類映射,則返回空字符串。

unicodedata.normalize(form, unistr)?

返回 Unicode 字符串 unistr 的正常形式 formform 的有效值為 'NFC' 、 'NFKC' 、 'NFD' 和 'NFKD' 。

Unicode 標(biāo)準(zhǔn)基于規(guī)范等價(jià)和兼容性等效的定義定義了 Unicode 字符串的各種規(guī)范化形式。在 Unicode 中,可以以各種方式表示多個(gè)字符。 例如,字符 U+00C7 (帶有 CEDILLA 的 LATIN CAPITAL LETTER C )也可以表示為序列 U+0043( LATIN CAPITAL LETTER C )U+0327( COMBINING CEDILLA )。

對(duì)于每個(gè)字符,有兩種正規(guī)形式:正規(guī)形式 C 和正規(guī)形式 D 。正規(guī)形式D(NFD)也稱為規(guī)范分解,并將每個(gè)字符轉(zhuǎn)換為其分解形式。 正規(guī)形式C(NFC)首先應(yīng)用規(guī)范分解,然后再次組合預(yù)組合字符。

除了這兩種形式之外,還有兩種基于兼容性等效的其他常規(guī)形式。 在 Unicode 中,支持某些字符,這些字符通常與其他字符統(tǒng)一。 例如, U+2160(ROMAN NUMERAL ONE)與 U+0049(LATIN CAPITAL LETTER I)完全相同。 但是, Unicode 支持它與現(xiàn)有字符集(例如 gb2312 )的兼容性。

正規(guī)形式KD(NFKD)將應(yīng)用兼容性分解,即用其等價(jià)項(xiàng)替換所有兼容性字符。 正規(guī)形式KC(NFKC)首先應(yīng)用兼容性分解,然后是規(guī)范組合。

即使兩個(gè) unicode 字符串被規(guī)范化并且人類讀者看起來(lái)相同,如果一個(gè)具有組合字符而另一個(gè)沒有,則它們可能無(wú)法相等。

此外,該模塊暴露了以下常量:

unicodedata.unidata_version?

此模塊中使用的 Unicode 數(shù)據(jù)庫(kù)的版本。

unicodedata.ucd_3_2_0?

這是一個(gè)與整個(gè)模塊具有相同方法的對(duì)象,但對(duì)于需要此特定版本的 Unicode 數(shù)據(jù)庫(kù)(如 IDNA )的應(yīng)用程序,則使用 Unicode 數(shù)據(jù)庫(kù)版本 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

http://www.unicode.org/Public/11.0.0/ucd/NameAliases.txt

2

http://www.unicode.org/Public/11.0.0/ucd/NamedSequences.txt