unicodedata
— Unicode 資料庫¶
此模組提供對 Unicode 字元資料庫 (UCD) 的訪問,該資料庫定義了所有 Unicode 字元的字元屬性。此資料庫中包含的資料是從 UCD 15.1.0 版本 編譯而來的。
該模組使用與 Unicode 標準附件 #44,“Unicode 字元資料庫” 中定義的相同的名稱和符號。它定義了以下函式
- unicodedata.name(chr[, default])¶
返回分配給字元 chr 的名稱,以字串形式返回。 如果沒有定義名稱,則返回 default,或者,如果沒有給出 default,則引發
ValueError
。
- unicodedata.decimal(chr[, default])¶
返回分配給字元 chr 的十進位制值,以整數形式返回。 如果沒有定義這樣的值,則返回 default,或者,如果沒有給出 default,則引發
ValueError
。
- unicodedata.digit(chr[, default])¶
返回分配給字元 chr 的數字值,以整數形式返回。 如果沒有定義這樣的值,則返回 default,或者,如果沒有給出 default,則引發
ValueError
。
- unicodedata.numeric(chr[, default])¶
返回分配給字元 chr 的數值,以浮點數形式返回。 如果沒有定義這樣的值,則返回 default,或者,如果沒有給出 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)¶
返回 Unicode 字串 unistr 的規範化形式 form。 form 的有效值是 ‘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(羅馬數字一)實際上與 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 資料庫的 3.2 版本,用於需要此特定版本 Unicode 資料庫的應用程式(例如 IDNA)。
示例
>>> 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'
腳註