作者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/cn.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