unicodedata — Unicode 資料庫


此模組提供對 Unicode 字元資料庫 (UCD) 的訪問,該資料庫定義了所有 Unicode 字元的字元屬性。此資料庫中包含的資料是從 UCD 版本 16.0.0 編譯而來的。

該模組使用與 Unicode 標準附件 #44,“Unicode 字元資料庫”中定義的相同的名稱和符號。它定義了以下函式

參見

Unicode HOWTO 瞭解有關 Unicode 以及如何使用此模組的更多資訊。

unicodedata.lookup(name)

按名稱查詢字元。如果找到具有給定名稱的字元,則返回相應的字元。如果未找到,則會引發 KeyError。例如

>>> unicodedata.lookup('LEFT CURLY BRACKET')
'{'

此函式返回的字元與字串字面量中 \N 轉義序列產生的字元相同。例如

>>> unicodedata.lookup('MIDDLE DOT') == '\N{MIDDLE DOT}'
True

版本 3.3 中已更改: 添加了對名稱別名 [1] 和命名序列 [2] 的支援。

unicodedata.name(chr, default=None, /)

以字串形式返回分配給字元 chr 的名稱。如果未定義名稱,則返回 default,如果未給出 default,則引發 ValueError。例如

>>> unicodedata.name('½')
'VULGAR FRACTION ONE HALF'
>>> unicodedata.name('\uFFFF', 'fallback')
'fallback'
unicodedata.decimal(chr, default=None, /)

以整數形式返回分配給字元 chr 的十進位制值。如果未定義此類值,則返回 default,如果未給出 default,則引發 ValueError。例如

>>> unicodedata.decimal('\N{ARABIC-INDIC DIGIT NINE}')
9
>>> unicodedata.decimal('\N{SUPERSCRIPT NINE}', -1)
-1
unicodedata.digit(chr, default=None, /)

以整數形式返回分配給字元 chr 的數字值。如果未定義此類值,則返回 default,如果未給出 default,則引發 ValueError

>>> unicodedata.digit('\N{SUPERSCRIPT NINE}')
9
unicodedata.numeric(chr, default=None, /)

以浮點數形式返回分配給字元 chr 的數值。如果未定義此類值,則返回 default,如果未給出 default,則引發 ValueError

>>> unicodedata.numeric('½')
0.5
unicodedata.category(chr)

以字串形式返回分配給字元 chr 的通用類別。通用類別名稱由兩個字母組成。有關類別程式碼列表,請參見 Unicode 字元資料庫文件的通用類別值部分。例如

>>> unicodedata.category('A')  # 'L'etter, 'u'ppercase
'Lu'
unicodedata.bidirectional(chr)

以字串形式返回分配給字元 chr 的雙向類別。如果未定義此類值,則返回空字串。有關雙向程式碼列表,請參見 Unicode 字元資料庫的雙向類別值部分。例如

>>> unicodedata.bidirectional('\N{ARABIC-INDIC DIGIT SEVEN}') # 'A'rabic, 'N'umber
'AN'
unicodedata.combining(chr)

以整數形式返回分配給字元 chr 的規範組合類別。如果未定義組合類別,則返回 0。有關更多資訊,請參見 Unicode 字元資料庫的規範組合類別值部分

unicodedata.east_asian_width(chr)

以字串形式返回分配給字元 chr 的東亞寬度。有關寬度列表或更多資訊,請參見 Unicode 標準附件 #11

unicodedata.mirrored(chr)

以整數形式返回分配給字元 chr 的映象屬性。如果字元在雙向文字中被識別為“映象”字元,則返回 1,否則返回 0。例如

>>> unicodedata.mirrored('>')
1
unicodedata.decomposition(chr)

以字串形式返回分配給字元 chr 的字元分解對映。如果未定義此類對映,則返回空字串。例如

>>> unicodedata.decomposition('Ã')
'0041 0303'
unicodedata.normalize(form, unistr)

返回 Unicode 字串 unistr 的規範形式 formform 的有效值為 '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 是否處於規範形式 formform 的有效值為 'NFC'、'NFKC'、'NFD' 和 'NFKD'。

在 3.8 版本加入。

此外,該模組還公開了以下常量

unicodedata.unidata_version

此模組中使用的 Unicode 資料庫的版本。

unicodedata.ucd_3_2_0

這是一個與整個模組具有相同方法的物件,但使用 Unicode 資料庫版本 3.2,適用於需要此特定版本 Unicode 資料庫的應用程式(例如 IDNA)。

腳註