Python код c метод safe_encode - PullRequest
       34

Python код c метод safe_encode

0 голосов
/ 25 января 2020

С учетом байтовой строки, например 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 вместе с недопустимыми символами.

1 Ответ

2 голосов
/ 25 января 2020

Указание 'backslashreplace' в качестве режима обработки ошибок при декодировании строки байтов заменит недекодируемые байты escape-последовательностями с обратной косой чертой:

decoded = b.decode('utf-8', errors='backslashreplace')

Кроме того, это операция декодирования, а не операция кодирования. Декодирование байтов-> строка. Кодировка строка-> байты.

...