2012-02-17 8 views
11

पायथन 2 में, string-escape और unicode-escape है। utf-8 बाइट स्ट्रिंग के लिए, स्ट्रिंग-भागने \ बचने और गैर-ascii बाइट्स रखने के लिए, की तरह कर सकते हैं:पायथन 3 यूनिकोड-एस्केप गैर-एसीआई बाइट्स के साथ काम नहीं करता है?

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

हालांकि, python3 में, string-escape निकाल दिया जाता है।

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

यह ascii बाइट्स के साथ काम करता है: हम बाइट्स में स्ट्रिंग सांकेतिक शब्दों में बदलना और unicode-escape साथ यह डिकोड करने के लिए किया है। लेकिन गैर- 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 बाइट्स बच गए हैं, जो त्रुटि एन्कोडिंग की ओर जाता है।

तो क्या इसके लिए कोई समाधान है? क्या यह सभी non-ascii बाइट्स को रखने और सभी भागने के निशान को डीकोड करने के लिए python3 में संभव है?

उत्तर

6
import codecs 
codecs.getdecoder('unicode_escape')('你好\\n') 
संबंधित मुद्दे