標準化 Unicode
Python 的 unicodedata 模組提供了操作 Unicode 字串的方法。一項常見任務是規範化字串,使其使用盡可能簡單的表示形式,消除重複的 Unicode 實體。
問題
考慮以下範例:
import unicodedata char = "á" len(char) [unicodedata.name(c) for c in char]
結果顯示字串「á」被規範化為其最簡單的形式:「LATIN SMALL LETTER A WITH急性」。但是,如果我們顛倒字元的順序:
char = "á" len(char) [unicodedata.name(c) for c in char]
結果將分解為兩個單獨的字元:「LATIN SMALL LETTER A」和「COMBINING ACUTE ACCENT」。此行為不一致,並且可能會使字串操作複雜化。
解決方案
要一致地規範化 Unicode 字串,請使用 unicodedata 模組中的 .normalize() 函數。 NFC 形式(正常形式組合)返回組合字符,而 NFD 形式(正常形式分解)則為您提供分解的組合字符。
例如,使用與上面相同的 Unicode 組合:
print(ascii(unicodedata.normalize('NFC', '\u0061\u0301'))) print(ascii(unicodedata.normalize('NFD', '\u00e1')))
輸出顯示 NFC 形式產生組合字元“é”,而 NFD 形式產生分解序列“au0301”。
附加形式 NFKC 和 NFKD,處理相容性代碼點。這些形式以其規範形式取代相容性字元。例如:
unicodedata.normalize('NFKC', '\u2167')
將羅馬數字八代碼點 (U 2167) 轉換為 ASCII 序列「VIII」。
請注意,並非所有轉換都是可交換的。分解組合字元然後重新組合可能不會產生原始序列。 Unicode 標準維護了此行為的例外清單。
以上是Python 的「unicodedata」模組如何標準化 Unicode 字串以實現一致的操作?的詳細內容。更多資訊請關注PHP中文網其他相關文章!