decode
यूनिकोड स्ट्रिंग्स की विधि में वास्तव में कोई एप्लिकेशन नहीं है (जब तक कि आपके पास कुछ गैर-टी नहीं है कुछ कारणों से एक यूनिकोड स्ट्रिंग में ext डेटा - नीचे देखें)। यह मुख्य रूप से ऐतिहासिक कारणों से है, मुझे लगता है। पायथन 3 में यह पूरी तरह से चला गया है।
unicode().decode()
एक अंतर्निहित एन्कोडिंग s
की का उपयोग कर डिफ़ॉल्ट (ascii) कोडेक प्रदर्शन करेंगे। इसे इस प्रकार सत्यापित करें:
>>> s = u'ö'
>>> s.decode()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\xf6' in position 0:
ordinal not in range(128)
>>> s.encode('ascii')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\xf6' in position 0:
ordinal not in range(128)
त्रुटि संदेश बिल्कुल वही हैं।
str().encode()
के लिए यह दूसरी तरह के आसपास है - यह डिफ़ॉल्ट एन्कोडिंग के साथ s
का एक अंतर्निहित डिकोडिंग प्रयास करता है:
>>> s = 'ö'
>>> s.decode('utf-8')
u'\xf6'
>>> s.encode()
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)
इस तरह प्रयुक्त, str().encode()
भी ज़रूरत से ज़्यादा है।
लेकिन वहाँ उत्तरार्द्ध विधि है कि उपयोगी है की एक और आवेदन है:
>>> s.encode('zip')
'x\x9c;\xbc\r\x00\x02>\x01z'
: वहाँ
encodings एक सार्थक तरीके से 8 बिट तार करने के लिए लागू किया जा सकता वर्ण सेट से कोई संबंध नहीं है, और इस तरह है कि कर रहे हैं
आप सही हैं, हालांकि: इन दोनों अनुप्रयोगों के लिए "एन्कोडिंग" का अस्पष्ट उपयोग ... अजीब है। फिर, पाइथन 3 में अलग byte
और string
प्रकारों के साथ, यह अब कोई समस्या नहीं है।
मुझे लगता है कि [इस पृष्ठ] का दूसरा जवाब (http://stackoverflow.com/questions/10288016/usage-of-unicode-and-encode-functions-in-python) पर्याप्त और संक्षेप में स्पष्ट है। – Ben