मैं कुछ गैर- ASCIIutf-8 इनकोडिंग उस पर डेटा के साथ एक स्ट्रिंग चर बना कर शुरूआत:क्यों यूनिकोड() मेरे ऑब्जेक्ट पर स्ट्रिंग() का उपयोग करता है केवल बिना एन्कोडिंग के?
>>> text = 'á'
>>> text
'\xc3\xa1'
>>> text.decode('utf-8')
u'\xe1'
का उपयोग unicode()
उस पर त्रुटियों को जन्म देती है ...
>>> unicode(text)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0:
ordinal not in range(128)
। .. लेकिन अगर मुझे एन्कोडिंग पता है तो मैं इसे दूसरे पैरामीटर के रूप में उपयोग कर सकता हूं:
>>> unicode(text, 'utf-8')
u'\xe1'
>>> unicode(text, 'utf-8') == text.decode('utf-8')
True
अब अगर मैं एक वर्ग कि __str__()
विधि में इस पाठ देता है:
>>> class ReturnsEncoded(object):
... def __str__(self):
... return text
...
>>> r = ReturnsEncoded()
>>> str(r)
'\xc3\xa1'
unicode(r)
उस पर str()
उपयोग करने के लिए लगता है, के बाद से यह ऊपर unicode(text)
रूप में एक ही त्रुटि को जन्म देती है: अब तक
>>> unicode(r)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0:
ordinal not in range(128)
सब कुछ योजनाबद्ध है!
लेकिन कोई भी कभी भी उम्मीद करेंगे के रूप में, unicode(r, 'utf-8')
भी कोशिश नहीं करेगा:
>>> unicode(r, 'utf-8')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: coercing to Unicode: need string or buffer, ReturnsEncoded found
क्यों? यह असंगत व्यवहार क्यों? क्या यह एक बग है? क्या इसका इरादा है? बहुत अजीब
मुझे लगता है कि मैंने खुद को स्पष्ट नहीं किया होगा। मुझे पता है कि। मेरा मतलब यह है कि क्यों यूनिकोड (आर) के यूनिकोड (आर, 'यूटीएफ -8') से अलग व्यवहार है ??? – nosklo
व्यवहार अजीब है क्योंकि अगर मैं 'utf-8' पास नहीं करता हूं तो यह ascii के रूप में डीकोड करने का प्रयास करता है। लेकिन अगर मैं 'utf-8' पास करता हूं तो यह एक अलग त्रुटि देता है ... – nosklo