[問題] 中文編碼問題

看板Python作者 (悠閒)時間9年前 (2015/07/15 21:44), 編輯推噓0(0014)
留言14則, 3人參與, 最新討論串1/5 (看更多)
使用python3~ 假設我取得一個中文已經編碼過的字串 d='\\xab\\xa2\\xc5o' print(d) 我想要印出原始中文該如何印呢? 原先想法以為是print(('b"'+d+'"').decode()) 但似乎沒這種寫法XD 請教各位大大~~ -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.227.52.99 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1436967851.A.C34.html

07/15 22:18, , 1F
Py3 字串跟 bytes 是很明確的,d 應該要是 bytes
07/15 22:18, 1F

07/15 22:18, , 2F
d = b'\xab\xa2\xc5o'; d.decode('big5') # 哈囉
07/15 22:18, 2F

07/15 22:27, , 3F
如果 d 是從別的字串 encode 完只複製它的值但是 str
07/15 22:27, 3F

07/15 22:27, , 4F
就要用一個特別的編碼 latin-1 (在 Py 2<->3 常用)
07/15 22:27, 4F

07/15 22:28, , 5F
d = '\xab\xa2\xc5o'.encode('latin1').decode('big5')
07/15 22:28, 5F

07/15 22:30, , 6F
但你今天是 '\\xab' 這個跟 '\xab' 意思完全不一樣
07/15 22:30, 6F

07/15 22:41, , 7F
s_crapped ='\\xab...' 我只有想到很 hack 的做法
07/15 22:41, 7F

07/15 22:41, , 8F
eval('b"%s"' % s_crapped).decode('big5')
07/15 22:41, 8F

07/15 22:55, , 9F
有一個叫 string_escape 的編碼可以用
07/15 22:55, 9F

07/15 22:57, , 10F
啊, Python 3 要用 unicode_escape
07/15 22:57, 10F

07/15 23:12, , 11F
喔喔感謝上面兩位回覆, c大兩種假設基本上都會碰到...
07/15 23:12, 11F

07/15 23:27, , 12F
不過eval這方式還真特別,裡面這樣表達是指s_crapped會替換
07/15 23:27, 12F

07/15 23:28, , 13F
%s嗎?而這樣會解決\\問題?!有點神奇
07/15 23:28, 13F

07/15 23:29, , 14F
會變成 eval('b"\\xab..."') 但 eval 一般少用
07/15 23:29, 14F
文章代碼(AID): #1LfcEhmq (Python)
文章代碼(AID): #1LfcEhmq (Python)