我有一个网络资源,它返回给我的数据(根据规范)应该是 ASCII 编码的字符串。但在极少数情况下,我会收到垃圾数据。
例如返回一种资源b'\xd3PS-90AC'
而另一个资源,对于相同的键返回b'PS-90AC'
第一个值包含非 ASCII 字符串。显然违反了规范,但不幸的是这超出了我的控制范围。我们没有人 100% 确定这真的是is应保留的垃圾或数据。
调用远程资源的应用程序将数据保存在本地数据库中以供日常使用。我可以简单地做一个data.decode('ascii', 'replace')
or ..., 'ignore')
但随后我会丢失稍后可能有用的数据。
我的第一反应是使用'xmlcharrefreplace'
or 'backslashreplace'
作为错误处理程序。很简单,因为它会产生一个可显示的字符串。但后来我收到以下错误:TypeError: don't know how to handle UnicodeDecodeError in error callback
唯一有效的错误处理程序是surrogateescape
,但这似乎是用于文件名的。另一方面,对于my它会起作用的意图和目的。
Why are 'xmlcharrefreplace'
and 'backslashreplace'
不工作?我不明白这个错误。
For example,预期的执行将是:
>>> data = b'\xd3PS-90AC'
>>> new_data = data.decode('ascii', 'xmlcharrefreplace')
>>> print(repr(new_data))
'&#d3;PS-90AC'
这是一个做作的例子。我的目标是not lose任何数据。如果我会使用ignore
or replace
错误处理程序中,有问题的字节基本上会消失,并且信息会丢失。