作为练习,我构建了一个查询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 /语言尝试了相同的代码,并且不得到同样的问题:当我尝试反序列化对象时,一切正常。
有什么想法可以解决这个问题吗?是什么让JSON load()
函数窒息?
提前致谢。
答案 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”]之一;尝试解码为其中之一。