2015-11-25 78 views
2

我有一個JSON取出編碼的字符,例如:Python從字符串

item = {"name": '\x84\xa2 Target', ...} 
在結尾的功能

return json.dumps(item, ensure_ascii=True) 

運行功能使這個錯誤:

UnicodeDecodeError: 'utf8' codec can't decode byte 0x84 in position 6: invalid start byte

我試過

return json.dumps(item, ensure_ascii=False).encode('utf-8') 

但是,這給出了同樣的錯誤。

下面這段代碼做「工作」,但它給了JSON混淆其他代碼的道路(不是我的終點):

return json.dumps(item, encoding="ISO-8859-1") 

我想知道如何只是刪除所有「複雜'字符從任何字符串。

+0

你試過'json.dumps(項目).encode(」 ascii','忽略')'? – Felk

+0

這給出了:return _iterencode(o,0) UnicodeDecodeError:'utf8'編解碼器無法解碼位置6中的字節0x84:無效起始字節 – Rorschach

回答

0

這是愚蠢的,但似乎工作:

"".join([c for c in json.dumps(item, ensure_ascii=False) if c in string.printable]) 

返回

'{"name": " Target"}' 
+0

至於這裏發生了什麼:json.dumps(item,ensure_ascii = False)將返回一個實際的字符串而不是一個對象,但會保留UTF字符。然後,我使用list comprehension將字符串視爲一個列表,並檢查每個字符與可打印字符列表,然後使用join將其重新轉換爲字符串。 – user3757614