2012-11-21 31 views
9

मेरे पास एक ऐसा निर्देश है जो यूआरएल प्रतिक्रिया के साथ फ़ीड करता है। जैसा:यूनिकोड एन्कोडर त्रुटि: 'ascii' कोडेक अक्षरों को एन्कोड नहीं कर सकता

>>> d 
{ 
0: {'data': u'<p>found "\u62c9\u67cf \u591a\u516c \u56ed"</p>'} 
1: {'data': u'<p>some other data</p>'} 
... 
} 

इस डेटा मूल्यों पर xml.etree.ElementTree समारोह का उपयोग करते समय (d[0]['data']) मैं सबसे प्रसिद्ध त्रुटि संदेश मिलता है:

UnicodeEncodeError: 'ascii' codec can't encode characters...

क्या मैं इस यूनिकोड स्ट्रिंग के लिए क्या करना चाहिए इसके लिए उपयुक्त बनाने के लिए ElementTree पार्सर?

पीएस। कृपया मुझे यूनिकोड & पायथन स्पष्टीकरण के साथ लिंक न भेजें। मैंने इसे पहले से ही दुर्भाग्य से पढ़ा है, और इसका उपयोग नहीं कर सकता, उम्मीद है कि अन्य लोग कर सकते हैं।

उत्तर

23

आप इसे मैन्युअल रूप से सांकेतिक शब्दों में बदलना करने के लिए UTF-8 करना होगा:

ElementTree.fromstring(d[0]['data'].encode('utf-8')) 
एपीआई इनपुट के रूप में केवल इनकोडिंग लेता बाइट के रूप में

। यूटीएफ -8 ऐसे डेटा के लिए एक अच्छा डिफ़ॉल्ट है।

यह वहाँ से फिर से यूनिकोड को डिकोड करने के लिए सक्षम हो जाएगा:

>>> from xml.etree import ElementTree 
>>> p = ElementTree.fromstring(u'<p>found "\u62c9\u67cf \u591a\u516c \u56ed"</p>'.encode('utf8')) 
>>> p.text 
u'found "\u62c9\u67cf \u591a\u516c \u56ed"' 
>>> print p.text 
found "拉柏 多公 园" 
+0

हाँ, कि पहली बात यह है मैंने कोशिश की थी और मैं हमेशा कोशिश करते हैं। समस्या 'ElementTree.tostring' के साथ है। क्या आप कृपया 'ElementTree.tostring (पी, विधि = 'टेक्स्ट') आज़माएं और बताएं कि यह क्यों काम नहीं करता है? धन्यवाद – theta

+1

आह, क्षमा करें। यह बहुत स्पष्ट था। '.ostस्टिंग() 'में वैकल्पिक तर्क' एन्कोडिंग 'है जो संभवतः डिफ़ॉल्ट रूप से एएससीआई पर सेट किया गया है, इसलिए' एन्कोडिंग = 'utf-8'' काम जोड़ना। चीयर्स – theta

+0

@theta: हे, बस आपको इसके बारे में बताने के बारे में। :-) –