मैंने आधिकारिक दस्तावेज़ों से HOWTO on Unicode पढ़ा है और एक पूर्ण, बहुत विस्तृत article भी पढ़ा है। फिर भी मुझे यह नहीं मिला कि यह मुझे यह त्रुटि क्यों फेंकता है।यूनिकोड एन्कोडर त्रुटि: 'ascii' कोडेक चरित्र को एन्कोड नहीं कर सकता [...]
यहां मैं कोशिश करता हूं: मैं एक एक्सएमएल फ़ाइल खोलता हूं जिसमें एएससीआईआई रेंज से बाहर वर्ण होते हैं (लेकिन एक्सएमएल रेंज के अंदर)। मैं cfg = codecs.open(filename, encoding='utf-8, mode='r')
के साथ ऐसा करता हूं जो ठीक चलता है। repr()
के साथ स्ट्रिंग को देखते हुए मुझे एक यूनिकोड स्ट्रिंग भी दिखाती है।
अब मैं आगे बढ़ता हूं और parseString(cfg.read().encode('utf-8')
के साथ पढ़ता हूं। बेशक, मेरी एक्सएमएल फाइल इस से शुरू होती है: <?xml version="1.0" encoding="utf-8"?>
। हालांकि मुझे लगता है कि यह प्रासंगिक नहीं है, मैंने अपनी पायथन लिपि के लिए utf-8 भी परिभाषित किया है, लेकिन चूंकि मैं इसमें सीधे यूनिकोड वर्ण नहीं लिख रहा हूं, यह यहां लागू नहीं होना चाहिए। निम्न पंक्ति के लिए समान: from __future__ import unicode_literals
जो शुरुआत में भी सही है।
अगली बात मैं जेनरेट ऑब्जेक्ट को अपनी कक्षा में पास करता हूं जहां मैंने इस तरह के चर में टैग पढ़े: xmldata.getElementsByTagName(tagName)[0].firstChild.data
और इसे मेरी कक्षा में एक चर के लिए असाइन करें।
अब पूरी तरह से क्या काम करता है उन आदेशों हैं (obj वर्ग का एक उदाहरण है):
for element in obj:
print element
और इस आदेश के रूप में अच्छी तरह से काम करता है:
print obj.__repr__()
मैं __iter__()
परिभाषित बस हर उपज के लिए परिवर्तनीय जबकि __repr__()
ठेठ प्रिंटफ सामग्री का उपयोग करता है: "%s" % self.varname
दोनों आदेश पूरी तरह प्रिंट करते हैं और आउटपुट टी कर सकते हैं वह यूनिकोड चरित्र। यह क्या काम नहीं करता है:
print obj
और अब मैं फंस कर रहा हूँ क्योंकि इस फेंकता खतरनाक
UnicodeEncodeError: 'ascii' codec can't encode character u'\xfc' in position 47:
तो मैं क्या याद आ रही है? मैं क्या गलत कर रहा हूं? मैं एक सामान्य समाधान की तलाश में हूं, मैं हमेशा स्ट्रिंग को यूनिकोड के रूप में संभालना चाहता हूं, बस किसी भी संभावित त्रुटियों से बचने और एक संगत प्रोग्राम लिखने के लिए।
संपादित करें: मैं भी इस परिभाषित: प्रलेखन से
def __str__(self):
return self.__repr__()
def __unicode__(self):
return self.__repr__()
मुझे मिल गया है कि इस
'प्रिंट ओबीजे' ऑब्जेक्ट के '__str__' का उपयोग करेगा, न कि '__repr__'। – BrenBarn
आपका डिफ़ॉल्ट एन्कोडिंग क्या है? मेरा मतलब है * sys.getdefaultencoding() * –
@ ब्रेनबर्न: __str__ को वापसी के रूप में लागू किया गया है __repr __() – javex