2013-10-29 8 views
8

पायथन 3 ने यूनिकोड व्यवहार को सरोगेट जोड़े को अस्वीकार करने के लिए बदल दिया जबकि python2 नहीं।python2 में surrogateescape कैसे करें

एक सवाल here

नहीं है लेकिन यह कैसे को Python2 या कैसे सरोगेट बच करने के लिए किराए की जोड़े को दूर करने पर एक समाधान नहीं दे रहे हों।

python3 उदाहरण:

>>> a = b'\xed\xa0\xbd\xe4\xbd\xa0\xe5\xa5\xbd' 
>>> a.decode('utf-8', 'surrogateescape') 
'\udced\udca0\udcbd你好' 
>>> a.decode('utf-8', 'ignore') 
'你好' 

'\ निश्चित \ xa0 \ xbd' यहाँ उचित utf-8 वर्ण नहीं है। और मैं उन्हें अनदेखा करना चाहता हूं या उनसे बचना चाहता हूं।

क्या यह Python2 में एक ही चीज़ करना संभव है?

+0

पाया जा सकता है वास्तव में क्या आप क्या करना चाहते हैं? यह स्पष्ट नहीं है। एक उदाहरण प्रदान करें। –

+0

@MarkTolonen मैंने एक उदाहरण जोड़ा है। – lxyu

+0

मुझे '\ udc00' और '\ udfff' के बीच सभी वर्णों को हटाने के लिए डीकोडेड यूनिकोड ऑब्जेक्ट को पोस्ट-प्रोसेस करने से बेहतर तरीका दिखाई नहीं देता है। –

उत्तर

5

कोई अंतर्निहित समाधान नहीं है, लेकिन वहाँ अजगर-भविष्य में surrogateescapes के एक कार्यान्वयन है: https://github.com/PythonCharmers/python-future

आयात के लिए from future.utils.surrogateescape import register_surrogateescape जोड़ें। फिर विधि register_surrogateescape() पर कॉल करें और फिर आप त्रुटि हैंडलर encode और decode में उपयोग कर सकते हैं।

एक उदाहरण here

संबंधित मुद्दे