作者Czero (悠閒)
看板Python
標題[問題] 中文編碼問題
時間Wed Jul 15 21:44:07 2015
使用python3~
假設我取得一個中文已經編碼過的字串
d='\\xab\\xa2\\xc5o'
print(d)
我想要印出原始中文該如何印呢?
原先想法以為是print(('b"'+d+'"').decode())
但似乎沒這種寫法XD
請教各位大大~~
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.227.52.99
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Python/M.1436967851.A.C34.html
1F:→ ccwang002: Py3 字串跟 bytes 是很明確的,d 應該要是 bytes 07/15 22:18
2F:→ ccwang002: d = b'\xab\xa2\xc5o'; d.decode('big5') # 哈囉 07/15 22:18
3F:→ ccwang002: 如果 d 是從別的字串 encode 完只複製它的值但是 str 07/15 22:27
4F:→ ccwang002: 就要用一個特別的編碼 latin-1 (在 Py 2<->3 常用) 07/15 22:27
5F:→ ccwang002: d = '\xab\xa2\xc5o'.encode('latin1').decode('big5') 07/15 22:28
6F:→ ccwang002: 但你今天是 '\\xab' 這個跟 '\xab' 意思完全不一樣 07/15 22:30
7F:→ ccwang002: s_crapped ='\\xab...' 我只有想到很 hack 的做法 07/15 22:41
8F:→ ccwang002: eval('b"%s"' % s_crapped).decode('big5') 07/15 22:41
9F:→ uranusjr: 有一個叫 string_escape 的編碼可以用 07/15 22:55
10F:→ uranusjr: 啊, Python 3 要用 unicode_escape 07/15 22:57
11F:→ Czero: 喔喔感謝上面兩位回覆, c大兩種假設基本上都會碰到... 07/15 23:12
12F:→ Czero: 不過eval這方式還真特別,裡面這樣表達是指s_crapped會替換 07/15 23:27
13F:→ Czero: %s嗎?而這樣會解決\\問題?!有點神奇 07/15 23:28
14F:→ ccwang002: 會變成 eval('b"\\xab..."') 但 eval 一般少用 07/15 23:29