Python:解析JSON字符串时处理损坏的unicode字节

时间:2011-11-02 16:49:10

标签: python json unicode

我的代码会从UserVoice网站获取一些内容。您可能知道,UserVoice是一个无法正确处理数据的软件。实际上,为了减少搜索页面上的文本量,他们将文本剪切为300个字符,然后在末尾添加“...”。事实是,他们不关心在多字节字符的中间切割,导致部分utf-8“字节”:例如。对于è字符,我得到了\xc3而不是\xc3\xa8s

当然,当我向json.loads提供这个可怕的汤时,它会以UnicodeDecodeError失败。所以我的问题很简单:如何让json.loads忽略这些错误的字节,就像我可以使用.decode('utf-8', 'ignore')一样,如果我可以访问函数的内部? / p>

感谢。

2 个答案:

答案 0 :(得分:11)

你不要求simplejson忽略它们。当我遇到类似你的问题时,我只是跑了.decode('utf-8', 'ignore').encode('utf-8')然后继续。

答案 1 :(得分:8)

只需将Unicode字符串传递给json.loads()

>>> badstr = "qualité"[:-1]+".."
>>> badstr
'qualit\xc3..'
>>> json_str = '["%s"]' % badstr
>>> import json
>>> json.loads(json_str)
Traceback (most recent call last):
 ...
UnicodeDecodeError: 'utf8' codec can't decode byte 0xc3 in position 6: invalid \
continuation byte
>>> json.loads(json_str.decode('utf-8','ignore'))
[u'qualit..']