2012-02-17 3 views
11

W python2 jest string-escape i unicode-escape. Dla UTF-8 bajtowy ciąg, string-ucieczka mogła uciec \ i zachować bajtów spoza ASCII, jak:python3 unicode-escape nie działa z bajtami innymi niż ascii?

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

Jednak w python3, string-escape zostanie usunięty. Mamy do kodowania znaków w bajtach i dekoduje go unicode-escape:

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

To działa z bajtów ASCII. Ale bajtów non-ASCII zostaną również uciekł:

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

Wszystkie bajty spoza ASCII są uciekł, co prowadzi do kodowania błędu.

Więc czy istnieje rozwiązanie tego problemu? Czy w python3 można zachować wszystkie bajty inne niż ascii i dekodować wszystkie znaki escape?

Odpowiedz

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