2012-02-17 5 views
11

В python2 есть string-escape и unicode-escape. Для UTF-8 строки байтов, строка-побег мог убежать \ и сохранить не-ASCII байт, как:python3 unicode-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-символы?

ответ

6
import codecs 
codecs.getdecoder('unicode_escape')('你好\\n') 
Смежные вопросы