2012-08-08 9 views
11
myString = 'éíěřáé' 

मुझे इस स्ट्रिंग को यूनिकोड में डीकोड करने की आवश्यकता है। क्या उपयोग में वृद्धि और सामान्य रूप से इन दो तरीकों के बीच कोई अंतर है?string.decode() बनाम यूनिकोड (स्ट्रिंग)

myString.decode(encoding='UTF-8', errors='ignore') 

और

unicode(myString, encoding='UTF-8', errors='ignore') 

उत्तर

9

unicode निर्माता तार से अलग अन्य प्रकार के ले जा सकते हैं:

>>> unicode(10) 
u'10' 

bytestring मामले के लिए, तथापि, दो रूपों ज्यादातर बराबर हैं। कुछ एन्कोडिंग विकल्प unicode निर्माता के रूप में वे यूनिकोड उत्पादन में परिणाम नहीं के लिए मान्य नहीं हैं, लेकिन bytestrings की .decode विधि के लिए मान्य हैं, इस तरह के रूप में 'hex':

>>> unicode('10', encoding='hex') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: decoder did not return an unicode object (type=str) 
0

अजगर में 2.x str.decode() में हो सकता है या तो एक यूनिकोड ऑब्जेक्ट या कोई अन्य strunicode() फ़ंक्शन केवल एन्कोडिंग के लिए काम करता है जिसके परिणामस्वरूप यूनिकोड ऑब्जेक्ट होता है।

उदाहरण के लिए:

>>> "x\x9cKLJ\x06\x00\x02M\x01'".decode('zip') 
'abc' 
>>> unicode("x\x9cKLJ\x06\x00\x02M\x01'", encoding='zip') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: decoder did not return an unicode object (type=str) 
>>> 

ध्यान दें कि आंतरिक रूप से वे ठीक वैसे ही दोनों के रूप में काम करने के लिए कॉल unicode() का संकेत है कि यह वास्तव में वस्तु को डिकोड किया और उसके बाद ही परिणाम के प्रकार पर आपत्ति की।

2

वे अनिवार्य रूप से वही हैं, लेकिन किसी भी मामले में कुछ मामूली प्रदर्शन शॉर्टकट के साथ; str.decode जानता है कि इसका तर्क एक स्ट्रिंग है, इसलिए यह अपने तर्क की शॉर्टकट प्रकार की जांच कर सकता है, जबकि unicode.__new__ में यूटीएफ -8 समेत कुछ सामान्य एन्कोडिंग के लिए शॉर्टकट हैं।

दोनों विधियां सामान्य मामले में PyCodec_Decode पर कॉल करें।

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