python3 unicode-escape не работает с байтами, отличными от ascii?

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

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

Однако в python3 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-символы?

11
задан Ning Sun 17 February 2012 в 12:46
поделиться