python - 反序列化来自 Google 的 json 对象时出现编码错误

标签 python json encoding

作为练习,我构建了一个查询 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/

相关文章:

javascript - 在 .json 中查找最大值和最小值

python - 比较两个不同来源的日期

python - 在 PyTorch 中有条件地应用张量运算

javascript - 访问 json 对象中的元素

javascript - Django - 在模板中显示 Json 或 Httpresponse

php - UTF-8 和 mb_check_encoding

PHP unserialize() 偏移处错误

mysql - UTF-8 与 Latin1 mysql,未在 utf-8 上使用的索引

python - 如何将用户在 Matplotlib 中输入的点传递到 np.array?

Python itertools 组合长度