看板 Python 關於我們 聯絡資訊
使用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
ccwang002: Py3 字串跟 bytes 是很明確的,d 應該要是 bytes 07/15 22:18
ccwang002: d = b'\xab\xa2\xc5o'; d.decode('big5') # 哈囉 07/15 22:18
ccwang002: 如果 d 是從別的字串 encode 完只複製它的值但是 str 07/15 22:27
ccwang002: 就要用一個特別的編碼 latin-1 (在 Py 2<->3 常用) 07/15 22:27
ccwang002: d = '\xab\xa2\xc5o'.encode('latin1').decode('big5') 07/15 22:28
ccwang002: 但你今天是 '\\xab' 這個跟 '\xab' 意思完全不一樣 07/15 22:30
ccwang002: s_crapped ='\\xab...' 我只有想到很 hack 的做法 07/15 22:41
ccwang002: eval('b"%s"' % s_crapped).decode('big5') 07/15 22:41
uranusjr: 有一個叫 string_escape 的編碼可以用 07/15 22:55
uranusjr: 啊, Python 3 要用 unicode_escape 07/15 22:57
Czero: 喔喔感謝上面兩位回覆, c大兩種假設基本上都會碰到... 07/15 23:12
Czero: 不過eval這方式還真特別,裡面這樣表達是指s_crapped會替換 07/15 23:27
Czero: %s嗎?而這樣會解決\\問題?!有點神奇 07/15 23:28
ccwang002: 會變成 eval('b"\\xab..."') 但 eval 一般少用 07/15 23:29