С учетом байтовой строки, например B = b"\x81\xc9\x00\x07I ABCD_\xe2\x86\x97_"
Я хочу иметь возможность преобразовать ее в допустимую печатаемую строку UTF-8, максимально возможную UTF-8: S = "\\x81\\xc9\\x00\\x07I ABCD_↗_"
. Обратите внимание, что первая группа шестнадцатеричных байтов не является допустимым символом UTF-8, но последние 3 действительно определяют действительный символ UTF-8 (стрелка). Кажется, это должно быть частью кодеков, но я не могу понять, как это сделать.
например
>>> codecs.decode(codecs.escape_encode(B, 'utf-8')[0], 'utf-8')
'\\x81\\xc9\\x00\\x07I\\x19ABCD_\\xe2\\x86\\x97_'
экранирует действительный символ UTF-8 вместе с недопустимыми символами.