Re: [問題] 中文編碼問題

看板Python作者 (亮)時間10年前 (2015/07/15 23:10), 10年前編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/5 (看更多)
※ 引述《Czero (悠閒)》之銘言: : 使用python3~ : 假設我取得一個中文已經編碼過的字串 : d='\\xab\\xa2\\xc5o' : print(d) : 我想要印出原始中文該如何印呢? (恕刪) EDIT: TP 大大給了個比較好的方法: >>> cleaned = d.encode('latin1').decode('unicode_escape') >>> cleaned '\xab\xa2\xc5o' >>> cleaned.encode('latin1').decode('big5') '哈囉' 下面是用硬幹的效率很差。 這個東西要還原要一些工夫,首先 '\xab' 這是一個 char, '\\xab' 是三個 char 所以要回復就要強制做先把 'ab' 換成 16 進位表示的值,再轉成 char >>> int('ab', 16) 171 >>> chr(int('ab', 16)) # 等同於 chr(171) '\xab' 寫成完整的 code import re d = '\\xab\\xa2\\xc5o' unit_repr_regex = r'(\\x[0-9a-f]{2})' repr_to_chr = { s: chr(int(s[-2:]), 16) for s in set(re.findall(unit_repr_regex, d)) } d_corrected = d for chr_repr, chr_ in repr_to_chr: d_corrected = d_corrected.replace(chr_repr, chr_) d_corrected = d_corrected.encode('latin1').decode('big5') print(d_corrected) # 哈囉 PS 注意中間有個變數為了不要蓋到內建函式 chr() 命名成 chr_ PS2 如果轉換很多的話,不妨 repr_to_chr 直接建完 0-255 所有情況 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.44.9.167 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1436973024.A.D79.html ※ 編輯: ccwang002 (114.44.9.167), 07/15/2015 23:18:09

07/16 01:46, , 1F
第二種想法大致理解,太感謝你仔細地解說!
07/16 01:46, 1F
文章代碼(AID): #1LfdVWrv (Python)
討論串 (同標題文章)
文章代碼(AID): #1LfdVWrv (Python)