Python: глобальная обработка ошибок кодеков и utf-8 - PullRequest
0 голосов
/ 31 октября 2019

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