2012-02-17 18 views
11

Trong python2, có string-escapeunicode-escape. Đối với utf-8 chuỗi byte, chuỗi-escape thể thoát \ và giữ byte phi ascii, như:python3 unicode-escape không hoạt động với các byte không phải ascii?

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

Tuy nhiên, trong python3, string-escape được lấy ra. Chúng tôi phải mã hóa chuỗi thành byte và giải mã chuỗi bằng unicode-escape:

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

Nó hoạt động với byte ascii. Nhưng các byte không phải ascii cũng sẽ bị xóa:

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

Tất cả các byte không phải ascii đều được thoát, dẫn đến lỗi mã hóa.

Vì vậy, có giải pháp cho việc này không? Có thể trong python3 để giữ tất cả các byte không ascii và giải mã tất cả các ký tự thoát?

Trả lời

6
import codecs 
codecs.getdecoder('unicode_escape')('你好\\n') 
Các vấn đề liên quan