import sys import unicodedata s = 'pýtĥöñ\fis\tawesome\r\n' remap = { ord('\t') : ' ', #ord() 返回單字符字符串的整數序號 ord('\f') : ' ', ord('\r') : None } a = s.translate(remap) #空白字符\t 和\f 已經被從新映射到一個空格。回車字符r 直接被刪除
'''
經過使用dict.fromkeys() 方法構造一個字典,每一個Unicode 和音符做爲鍵,對於的值所有爲None函數
而後使用unicodedata.normalize() 將原始輸入標準化爲分解形式字符spa
sys.maxunicode : 給出最大Unicode代碼點的值的整數,即1114111(十六進制的0x10FFFF)。
unicodedata.combining:將分配給字符chr的規範組合類做爲整數返回。 若是未定義組合類,則返回0。
'''
cmb_chrs = dict.fromkeys(c for c in range(sys.maxunicode) if unicodedata.combining(chr(c))) #此部分建議拆分開來理解
b = unicodedata.normalize('NFD', a)
'''
調用translate 函數刪除全部重音符
'''
b.translate(cmb_chrs)
unicodedata庫中的normalize函數,該函數的第一個參數能夠接受」NFC」,’NFD’,’NFKC’,’NFKD’四個參數中的一個。
NFC(Normalization Form Canonical Composition):以標準等價方式來分解,而後以標準等價重組之。如果singleton的話,重組結果有可能和分解前不一樣。
儘量的縮短整個字符串的長度,因此會把’eu0301’2個字節壓縮到一個字節’é’。
NFD(Normalization Form Canonical Decomposition):以標準等價方式來分解
NFKD(Normalization Form Compatibility Decomposition):以相容等價方式來分解
NFKC(Normalization Form Compatibility Composition):以相容等價方式來分解,而後以標準等價重組之。
NFKC和NFKD可能會引發數據損失。