Мне нужно настроить глобальную обработку ошибок в 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