作爲練習,我構建了一個查詢Google Suggest JSON API的小腳本。該代碼非常簡單:反序列化來自Google的json對象時的編碼錯誤
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"],["","","","","","","","","",""]]'
所以接縫,當蟒蛇試圖解碼引發錯誤字符串。這隻會發生在google.co.jp和日語。我試着用不同的contry /語言編寫相同的代碼,我不要得到相同的問題:當我嘗試反序列化對象時,一切正常。
- 我檢查了響應頭,他們總是指定utf-8作爲響應編碼。
- 我查了JSON字符串以在線分析器(http://json.parser.online.fr/),並再次所有接縫OK
任何想法來解決這個問題?是什麼讓JSON load()
功能窒息?
在此先感謝。
存在您的問題:JSON永遠不應該在Shift_JIS中傳輸:唯一有效的JSON編碼是UTF- *。而且,`text/javascript`的實際內容類型很奇怪。另外,當我用Firefox打開該URL時,我得到了相同的響應,但使用UTF-8。 – Thanatos 2010-12-07 15:34:34