从Google反序列化json对象时编码错误

时间:2010-12-07 13:46:03

标签: 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和日语中。我用不同的contry /语言尝试了相同的代码,并且得到同样的问题:当我尝试反序列化对象时,一切正常。

  • 我检查了响应标头,并且始终指定utf-8作为响应编码。
  • 我使用在线解析器(http://json.parser.online.fr/)检查了JSON字符串,然后再次检查所有接缝

有什么想法可以解决这个问题吗?是什么让JSON load()函数窒息?

提前致谢。

2 个答案:

答案 0 :(得分:3)

响应标头(print response.header)包含以下信息:

Content-Type: text/javascript; charset=Shift_JIS

请注意字符集。

如果您在json.load中指定此编码,则可以使用:

result = json.load(response, encoding='shift_jis')

答案 1 :(得分:0)

无论规范是什么,字符串“\ x83A \ x83} \ x83] \ x83 \ x93”都不是UTF-8。

猜测,它是[“cp932”,“shift_jis”,“shift_jis_2004”,“shift_jisx0213”]之一;尝试解码为其中之一。