2008-11-06 7 views
24

उदाहरण के लिए, अगर मैं एक यूनिकोड स्ट्रिंग है, मैं इसे एक ASCII के रूप में सांकेतिक शब्दों में बदलना कर सकते हैं ताकि तरह स्ट्रिंग:मैं एक ASCII स्ट्रिंग को यूनिकोड के रूप में कैसे मानूं और इसमें पाइथन में बच निकले वर्णों को अनचेक कर सकता हूं?

>>> u'\u003cfoo/\u003e'.encode('ascii') 
'<foo/>' 

हालांकि, मैं जैसे है इस ASCII स्ट्रिंग:

'\u003foo\u003e' 

... कि मैं एक ही ASCII में ऊपर मेरा पहला उदाहरण के रूप में स्ट्रिंग चालू करना चाहते हैं:

'<foo/>' 

उत्तर

43

मुझे यह पता लगाने में थोड़ी देर लग गई, लेकिन 01 - अधिक जानकारी के लिए जुड़े हुए पृष्ठ के "यूनिकोड कंस्ट्रक्टर्स" अनुभाग देखें (

>>> s = '\u003cfoo/\u003e' 
>>> s.decode('unicode-escape') 
u'<foo/>' 
>>> s.decode('unicode-escape').encode('ascii') 
'<foo/>' 

वहाँ भी है एक 'कच्चे यूनिकोड-एस्केप' कोडेक यूनिकोड तार निर्दिष्ट करने के लिए अन्य तरीके से संभालने के लिए:सर्वश्रेष्ठ उत्तर था चूंकि मैं यूनिकोड-सावी नहीं हूं)।

संपादित करें: Python Standard Encodings भी देखें।

+0

यह वही करता है जो मैं चाहता हूं। बहुत बहुत धन्यवाद! – John

+0

http://www.python.org/doc/2.5.2/lib/standard-encodings.html –

-1

यह जहां पर निर्भर करता है एक छोटे से खतरनाक है स्ट्रिंग आ रहा है, लेकिन कैसे:

>>> s = '\u003cfoo\u003e' 
>>> eval('u"'+s.replace('"', r'\"')+'"').encode('ascii') 
'<foo>' 
+1

दुर्भाग्य से हमारे इनपुट उपयोगकर्ताओं से आ रही है तो यह हमारे लिए बहुत खतरनाक होगा साथ सभी पात्रों को देखने के लिए अनुमति देने के लिए इस प्रकार डीकोड। – John

1

पायथन 2.5 पर सही एन्कोडिंग "यूनिकोड-एस्केप" है, न कि "यूनिकोड-एस्केप" (अंडरस्कोर नोट करें)।

मुझे यकीन नहीं है कि पाइथन के नए संस्करण ने यूनिकोड नाम बदल दिया है, लेकिन यहां केवल अंडरस्कोर के साथ काम किया है।

वैसे भी, यह है।

2

नेड Batchelder ने कहा:

यह पर निर्भर करता है एक छोटे से खतरनाक है जहां स्ट्रिंग , से आ रही है, लेकिन कैसे किया जाता है के बारे में:

>>> s = '\u003cfoo\u003e' 
>>> eval('u"'+s.replace('"', r'\"')+'"').encode('ascii') 
'<foo>' 

वास्तव में इस विधि सुरक्षित बनाया जा सकता है जैसे:

>>> s = '\u003cfoo\u003e' 
>>> s_unescaped = eval('u"""'+s.replace('"', r'\"')+'-"""')[:-1] 

ट्रिपल-कोट स्ट्रिंग और समापन 3-कोट्स से पहले डैश को सही करें।

  1. एक 3 उद्धृत स्ट्रिंग का उपयोग करते हुए यह सुनिश्चित करेंगे कि उपयोगकर्ता स्ट्रिंग में प्रवेश करती है, तो '\\ "' (दृश्य स्पष्टता के लिए जोड़ा रिक्त स्थान) यह मूल्यांकनकर्ता को बाधित नहीं होगा,
  2. अंत में पानी का छींटा है उपयोगकर्ता की स्ट्रिंग '\ "' के साथ समाप्त होने पर एक असफलता। परिणाम देने से पहले हम डालने वाले डैश को [: -1]

इसलिए उपयोगकर्ताओं को दर्ज करने के बारे में चिंता करने की आवश्यकता नहीं होगी, जब तक कि यह कच्चे प्रारूप में कैप्चर नहीं किया जाता है।

0

कुछ बिंदु आपको समस्या आ जाती है जब आप एक स्ट्रिंग में चीनी अक्षरों या इमोटिकॉन जैसे विशेष वर्ण का सामना करेंगे आप यानी त्रुटियों कि इस तरह दिखना डिकोड करने के लिए चाहते हैं पर: मेरे मामले के लिए

UnicodeEncodeError: 'ascii' codec can't encode characters in position 109-123: ordinal not in range(128) 

(चहचहाना डाटा प्रोसेसिंग), मैं के रूप में मुझे कोई त्रुटि

>>> s = '\u003cfoo\u003e' 
>>> s.decode('unicode-escape').encode('utf-8') 
>>> <foo> 
संबंधित मुद्दे

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