2012-02-17 14 views
11

python2'de string-escape ve unicode-escape vardır. utf-8 bayt dize, dize-kaçış \ kaçabilseydim ve benzeri olmayan ASCII bayt tutmak:python3 unicode-escape, ascii olmayan baytlarla çalışmaz mı?

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

Ancak python3 içinde, string-escape kaldırılır.

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

Bu ASCII bayt ile çalışır: Biz bayt içine dize kodlamak ve unicode-escape ile deşifre gerekiyor. Ama ASCII olmayan bayt da kaçtı edilecektir:

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

olmayan tüm ASCII bayt hatası kodlayan yol açar öncelenecektir.

Bunun için bir çözüm var mı? Python3'te tüm ascii olmayan baytları tutmak ve tüm kaçış karakterlerini çözmek mümkün mü?

cevap

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