2015-11-25 46 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