【问题标题】:Python Removing the encoded characters from a stringPython从字符串中删除编码字符
【发布时间】:2015-11-25 00:16:49
【问题描述】:

我有一个json,例如:

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")

我想知道如何从任何字符串中删除所有“复杂”字符。

【问题讨论】:

  • 你试过json.dumps(item).encode('ascii', 'ignore')吗?
  • 这给出了:return _iterencode(o, 0) UnicodeDecodeError: 'utf8' codec can't decode byte 0x84 in position 6: invalid start byte

标签: python json


【解决方案1】:

这很愚蠢,但似乎有效:

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

来自

item = {"name": '\x84\xa2 Target'}

返回

'{"name": " Target"}'

【讨论】:

  • 至于这里发生了什么: json.dumps(item, ensure_ascii=False) 将返回一个实际的字符串而不是一个对象,但会保留 UTF 字符。然后我使用列表推导将字符串视为列表,并根据可打印字符列表检查每个字符,然后使用连接将其转回字符串。
猜你喜欢
  • 2012-02-14
  • 2020-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-28
相关资源
最近更新 更多