来自json网页的Unicode解码错误

时间:2014-07-22 00:03:00

标签: python json unicode python-requests python-3.4

就像事情一样,我在解码python中的一些unicode时遇到问题

具体来说,这个网页:xkcd.com/403/info.0.json

相关部分为Paul Erd\u00c5\u0091s!

当我通过json解码器运行时,unicode被解码,但没有使用正确的编解码器

我目前正在使用单行:

requests.get("http://xkcd.com/403/info.0.json").json()["alt"][-12:]

得到'Paul ErdÅ\x91s!'这显然不是我想要的

关于我能做些什么来修复它的想法?

1 个答案:

答案 0 :(得分:1)

要解决你需要编码为Latin-1的JSON(因为它天真地转码字节)然后从UTF-8解码。

<强>两次。因为它是双重的。

>>> json.loads('"Erd\u00c3\u0085\u00c2\u0091s!"')
u'Erd\xc3\x85\xc2\x91s!'
>>> json.loads('"Erd\u00c3\u0085\u00c2\u0091s!"').encode('latin-1').decode('utf-8')
u'Erd\xc5\x91s!'
>>> json.loads('"Erd\u00c3\u0085\u00c2\u0091s!"').encode('latin-1').decode('utf-8').encode('latin-1').decode('utf-8')
u'Erd\u0151s!'
>>> print json.loads('"Erd\u00c3\u0085\u00c2\u0091s!"').encode('latin-1').decode('utf-8').encode('latin-1').decode('utf-8')
Erdős!

Smack Randall对我来说,是吗?