在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/Python/ 為什么字符串中的和音符去掉后變成了對(duì)應(yīng)的ASCII字符?

為什么字符串中的和音符去掉后變成了對(duì)應(yīng)的ASCII字符?

python3-cookbook 中有一個(gè)這樣的例子:

>>> import unicodedata
>>> import sys
>>> cmb_chrs = dict.fromkeys(c for c in range(sys.maxunicode)
...                         if unicodedata.combining(chr(c)))
>>> a = 'pyt??? is awesome\n'
>>> b = unicodedata.normalize('NFD', a)
>>> b
'pyt??? is awesome\n'
>>> b.translate(cmb_chrs)
'python is awesome\n'
>>>

cmb_chrs 每個(gè)鍵對(duì)應(yīng)的值都是 None, 那么為什么在執(zhí)行 b.translate(cmb_chrs) 后可以得到字符串 python is awesome\n ?

回答
編輯回答
陌南塵

如果你執(zhí)行:

print([ord(x) for x in a])
# [112, 253, 116, 293, 246, 241, 32, 105, 115, 32, 97, 119, 101, 115, 111, 109, 101, 10]
print([ord(x) for x in b])
# [112, 121, 769, 116, 104, 770, 111, 776, 110, 771, 32, 105, 115, 32, 97, 119, 101, 115, 111, 109, 101, 10]

你會(huì)發(fā)現(xiàn),雖然 ab 打印出來(lái)是一樣的,內(nèi)部的編碼卻不一樣。原因在于 unicode.normalize 把帶音調(diào)的字符都拆開(kāi)了。而 cmb_chrs 中記錄了音調(diào)符號(hào)的 Unicode 碼,執(zhí)行 b.translate 后,音調(diào)自然就沒(méi)有了。

2017年12月22日 06:06
編輯回答
近義詞

神奇的 unicode:

>>> list(a)
['p', 'y', 't', '?', '?', '?', ' ', 'i', 's', ' ', 'a', 'w', 'e', 's', 'o', 'm', 'e', '\n']
>>> list(b)
['p', 'y', '?', 't', 'h', '?', 'o', '?', 'n', '?', ' ', 'i', 's', ' ', 'a', 'w', 'e', 's', 'o', 'm', 'e', '\n']
2018年2月28日 16:09