作为练习,我构建了一个查询 Google Suggest JSON API 的小脚本。代码很简单:
query = 'a'
url = "http://clients1.google.co.jp/complete/search?hl=ja&q=%s&json=t" %query
response = urllib.urlopen(url)
result = json.load(response)
UnicodeDecodeError: 'utf8' codec can't decode byte 0x83 in position 0: invalid start byte
如果我尝试read()
响应对象,这就是我得到的:
'["a",["amazon","ana","au","apple","adobe","alc","\x83A\x83}\x83]\x83\x93","\x83A\x83\x81\x83u\x83\x8d","\x83A\x83X\x83N\x83\x8b","\x83A\x83\x8b\x83N"],["","","","","","","","","",""]]'
因此,当 python 尝试解码字符串时,会引发错误。这只发生在 google.co.jp 和日语中。我在不同的国家/语言中尝试了相同的代码,但我没有遇到同样的问题:当我尝试反序列化对象时,一切正常。
- 我检查了响应 header ,它们始终指定 utf-8 作为响应编码。
- 我使用在线解析器 (http://json.parser.online.fr/) 检查了 JSON 字符串,所有接缝都正常
有什么想法可以解决这个问题吗?是什么导致 JSON load()
函数阻塞?
提前致谢。
最佳答案
响应 header (print response.header
)包含以下信息:
Content-Type: text/javascript; charset=Shift_JIS
记下字符集。
如果您在 json.load
中指定此编码,它将起作用:
result = json.load(response, encoding='shift_jis')
关于python - 反序列化来自 Google 的 json 对象时出现编码错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4377260/