python3-cookbook
中有一个这样的例子:
>>> import unicodedata
>>> import sys
>>> cmb_chrs = dict.fromkeys(c for c in range(sys.maxunicode)
... if unicodedata.combining(chr(c)))
>>> a = 'pýtĥöñ is awesome\n'
>>> b = unicodedata.normalize('NFD', a)
>>> b
'pýtĥöñ is awesome\n'
>>> b.translate(cmb_chrs)
'python is awesome\n'
>>>
cmb_chrs
每个键对应的值都是 None
, 那么为什么在执行 b.translate(cmb_chrs)
后可以得到字符串 python is awesome\n
?
如果你执行:
你会发现,虽然
a
、b
打印出来是一样的,内部的编码却不一样。原因在于unicode.normalize
把带音调的字符都拆开了。而cmb_chrs
中记录了音调符号的 Unicode 码,执行b.translate
后,音调自然就没有了。