2012-02-17 26 views
11

En python2, hay string-escape y unicode-escape. Para UTF-8 cadena de bytes, cadena de escaparse puede escapar \ y mantener bytes que no son ASCII, como:python3 unicode-escape no funciona con bytes no-ascii?

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

Sin embargo, en python3, se elimina string-escape. Tenemos para codificar cadena en bytes y decodificar con unicode-escape:

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

Se trabaja con bytes ASCII. Pero bytes no-ascii también se escaparon:

"你好\\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' 

Todos los bytes no-ascii se escaparon, lo que conduce a errores de codificación.

¿Hay alguna solución para esto? ¿Es posible en python3 conservar todos los bytes no ascii y decodificar todos los caracteres de escape?

Respuesta

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