Подтвердить что ты не робот

Python3 unicode-escape не работает с байтами без ascii?

В python2 есть string-escape и unicode-escape. Для строки байтов utf-8 строка-escape может сбежать\и сохранить байты без ascii, например:

"你好\\n".decode('string-escape')
'\xe4\xbd\xa0\xe5\xa5\xbd\n'

Однако, в python3, string-escape удаляется. Нам нужно закодировать строку в байтах и ​​декодировать ее с помощью unicode-escape:

"This\\n".encode('utf_8').decode('unicode_escape')
'This\n'

Он работает с байтами ascii. Но байты без ascii также будут экранированы:

"你好\\n".encode('utf_8')
b'\xe4\xbd\xa0\xe5\xa5\xbd\\n'
"你好\\n".encode('utf_8').decode('unicode_escape').encode('utf_8')
b'\xc3\xa4\xc2\xbd\xc2\xa0\xc3\xa5\xc2\xa5\xc2\xbd\n'

Все байты без ascii экранируются, что приводит к ошибке кодирования.

Итак, есть ли решение для этого? Возможно ли в python3 хранить все байты без ascii и декодировать все escape-символы?

4b9b3361

Ответ 1

import codecs
codecs.getdecoder('unicode_escape')('你好\\n')