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可能会引发数据损失。