8

Python3 更改了 unicode 行为以拒绝代理对,而 python2 没有。

这里有个问题

但它没有提供关于如何在 python2 中删除代理对或如何进行代理转义的解决方案。

Python3 示例:

>>> a = b'\xed\xa0\xbd\xe4\xbd\xa0\xe5\xa5\xbd'
>>> a.decode('utf-8', 'surrogateescape')
'\udced\udca0\udcbd你好'
>>> a.decode('utf-8', 'ignore')
'你好'

这里的 '\xed\xa0\xbd' 不是正确的 utf-8 字符。我想忽略它们或逃避它们。

是否可以在 python2 中做同样的事情?

4

1 回答 1

5

没有内置解决方案,但在 python-future 中有一个 surrogateescapes 的实现: https ://github.com/PythonCharmers/python-future

添加from future.utils.surrogateescape import register_surrogateescape到进口。然后调用该方法register_surrogateescape(),然后您可以在和中使用errors='surrogateescape'错误处理程序。encodedecode

一个例子可以在这里找到

于 2015-02-04T17:14:57.910 回答