首页 > 解决方案 > Python:编解码器和 utf-8 全局错误处理

问题描述

我需要codecs为第三方包设置全局错误处理。

在我的代码中,我可以执行以下操作:

import codecs

print(
    codecs.encode('\ud83d', encoding='utf-8', errors='replace')
)

我想在全球范围内实现相同的行为。我正在尝试类似的东西:

def relaxedutf8(exc):
    if not isinstance(exc, UnicodeDecodeError):
        raise TypeError("don't know how to handle %r" % exc)
    if exc.object[exc.start:exc.start+2] == "\xc0\x80":
        return (u"\x00", exc.start+2) # retry after two bytes
    else:
        raise exc

codecs.register_error("test.relaxedutf8", relaxedutf8)

print(
    codecs.encode('\ud83d', encoding='utf-8')
)

但它不起作用。错误是:

  File "codecs_errros.py", line 18, in <module>
    codecs.encode('\ud83d', encoding='utf-8')
UnicodeEncodeError: 'utf-8' codec can't encode character '\ud83d' in position 0: surrogates not allowed

标签: pythonunicodepython-unicode

解决方案


推荐阅读