2014-12-05 42 views
0

我對Python比較新,所以請和我一起裸照。來自JSON異常的Python編碼/解碼。UnicoDecodeError

我在具有像這樣的一些JSON數據拉動:

{ 
"string":"• Christmas 2014 •", 
"layer_id":490, 
"other": "attributes", 
"that_dont": "matter" 
} 

正在別處生成此JSON和我在通過HTTP請求拉(使用json.loads(request.text))。

當我打印我的控制檯中的字符串,我得到:

​​

(和exceptions.UnicodeDecodeError錯誤,如果我嘗試STR())

我打印上一個字符串PDF和需要的字符串字面意思是:

"\u00B7 Christmas 2014 \u00B7" 

我的直覺是有點哈克,我只是想更換系列與適當的Unicode點奇怪的字符,但我甚至不知道我期望取代的是什麼。

希望有任何指導!

+0

爲什麼U + 00B7,而不是U + 2022?無論如何,這是原創內容。 '•2014年聖誕節''。 – 2014-12-05 15:53:03

回答

1

請勿使用response.text;你在這裏造成Mojibakeresponse.text可能最終會使用錯誤的編解碼器,如果沒有在響應中指定任何字符集。

改爲使用response.json(),讓它爲您的JSON處理正確的編解碼器。

如果仍然看到相同的結果,則源使用CP1252解碼UTF-8的數據,你需要恢復這一進程:

corrected = broken.encode('cp1252').decode('utf8') 

其解決您的具體問題:

>>> print u"• Christmas 2014 •".encode('cp1252').decode('utf8') 
• Christmas 2014 • 

這些是U+2022 BULLET個字符。

您也可以使用ftfy library,它可以處理變爲亂碼自動解開你:

>>> import ftfy 
>>> print ftfy.fix_text(u"• Christmas 2014 •") 
• Christmas 2014 • 
+0

工作就像一個魅力。謝謝! – amlyhamm 2014-12-05 17:44:50