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

zop*_*eux 13 python unicode json

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

当然,当我给这个可怕的汤时json.loads,它失败了UnicodeDecodeError.所以我的问题很简单:我怎么能问json.loads忽略这些坏字节,因为我会做用.decode('utf-8', 'ignore'),如果我有访问函数的内部?

谢谢.

Lac*_*zar 11

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


jfs*_*jfs 9

只需将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..']
Run Code Online (Sandbox Code Playgroud)