1
我正在Django工作,並使用urllib2和simplejson來解析API中的一些信息。Django:在處理Latin1中的HTTP響應時出現Python編碼錯誤?
問題是API以Latin-1編碼的形式返回信息,並且偶爾會出現一個字符,導致Django因編碼錯誤而崩潰。這是我的代碼:
get_person_id_url = "http://www.domain.com/api/get?" + \
"key=KEY&num="+ urllib2.quote(number) + "&always_return=true&output=js"
request = urllib2.Request(get_person_id_url, None, {'Referer': ''})
response = urllib2.urlopen(request)
results = json.load(response)
person_id = results["person_id"]
我知道我可以使用這樣的轉Latin1的字符串爲UTF8:
responseString = responseString.decode('latin1').encode('utf-8')
,但它似乎對字符串這只是工作,所以我不完全確定如何或在何處應用它在上面的代碼。我應該解碼什麼以及在發生錯誤之前在哪裏捕獲錯誤?
不幸的是,我不記得使用什麼API調用來返回一個會使Django崩潰的字符 - 所以在它上線之前我無法做很多測試。我希望StackOverflow可以幫助...謝謝!
謝謝。我能做類似「response_string = response.read()(做解碼和編碼)results = json.load(response_string)」的東西,還是需要將response_string轉回到simplejson可以處理的對象中?這在一定程度上是我的問題 - 如何讓它回到simplejson,它的文檔非常有限。 – AP257 2010-03-31 15:51:56
'json.loads'簡單接受一個字符串(Json格式)。所以,例如,如果你的Python字符串是's ='{「a」:1}'',那麼你可以執行'd = json.loads(s)'並取回一個Python字典。同樣,'s = json.dumps(d)'會產生一個json編碼的字符串。我(我懷疑大多數人)只使用'dumps'和'loads'方法。 – rlotun 2010-03-31 19:11:19