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


This module provides access to the Unicode Character Database (UCD) which defines character properties for all Unicode characters. The data contained in this database is compiled from the UCD version 14.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 的正常形式 form 。 form 的有效值為 '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ī)范化并且人類讀者看起來相同,如果一個(gè)具有組合字符而另一個(gè)沒有,則它們可能無法相等。

unicodedata.is_normalized(form, unistr)?

判斷 Unicode 字符串 unistr 是否為正規(guī)形式 formform 的有效值為 'NFC', 'NFKC', 'NFD' 和 'NFKD'。

3.8 新版功能.

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

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

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

2

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