亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么字符串中的和音符去掉后變成了對應的ASCII字符?

為什么字符串中的和音符去掉后變成了對應的ASCII字符?

慕田峪9158850 2018-09-02 12:11:52
python3-cookbook 中有一個這樣的例子:>>> 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 每個鍵對應的值都是 None, 那么為什么在執行 b.translate(cmb_chrs) 后可以得到字符串 python is awesome\n ?
查看完整描述

1 回答

?
繁花不似錦

TA貢獻1851條經驗 獲得超4個贊

如果你執行:

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]

你會發現,雖然 a、b 打印出來是一樣的,內部的編碼卻不一樣。原因在于 unicode.normalize 把帶音調的字符都拆開了。而 cmb_chrs 中記錄了音調符號的 Unicode 碼,執行 b.translate 后,音調自然就沒有了。


查看完整回答
反對 回復 2018-09-02
  • 1 回答
  • 0 關注
  • 701 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號