दिलचस्प पोस्ट
स्विफ्ट में मैक्रोज़? कैसे प्रतिक्रिया रूटर v4 में इतिहास को धक्का? एक पैनल में एक पृष्ठभूमि छवि जोड़ें जीएनयू मेकफ़ाइल नियम एक स्रोत फ़ाइल से कुछ लक्ष्यों को उत्पन्न करता है क्यों नहीं मेरे कमजोर संदर्भ स्पष्ट कर रहे हैं के बाद मजबूत लोग चले गए हैं? जावा डोम के साथ XML नोड पाठ मान प्राप्त करना PHP में एक वेरिएबल के अंदर व्हाइटस्पेस पट्टी करना पायथन में पाठ की एन्कोडिंग निर्धारित करें कैसे आइवी और नेक्सस के साथ तीसरे पक्ष कलाकृतियों को प्रकाशित करने के लिए कन्वर्ट दिनांकटाइम को जूलियन दिनांक में सी # (सुरक्षित करने के लिए?) ब्राउज़र ऊर्ध्वाधर और क्षैतिज स्क्रॉलबार अक्षम करें कैसे JSON धारावाहिक सेट करने के लिए? अनुरोधित संसाधन पर 'अभिगम-नियंत्रण-अनुमति-उत्पत्ति' शीर्षक मौजूद नहीं है। उत्पत्ति '…' इसलिए प्रवेश की अनुमति नहीं है एक संकीर्ण सरणी में मूल्यों का फास्ट प्रतिस्थापन निष्पादक सेवा जो एक समय समाप्ति के बाद कार्य को बीच में आता है

सांकेतिक शब्दों में बदलना / व्याख्यान के बीच अंतर क्या है?

मुझे कभी नहीं यकीन है कि मैं str / यूनिकोड डीकोड और सांकेतिक शब्दों में बदलना के बीच के अंतर को समझता हूं।

मुझे पता है कि str().decode() के लिए है जब आपके पास बाइट्स की एक स्ट्रिंग होती है जिसे आपको पता है कि एक निश्चित कैरेक्टर एन्कोडिंग है, यह देखते हुए कि एन्कोडिंग नाम यह यूनिकोड स्ट्रिंग वापस करेगा।

मुझे पता है कि unicode().encode() एक दिए गए एन्कोडिंग नाम के अनुसार यूनिकोड वर्ण को बाइट्स की एक स्ट्रिंग में कनवर्ट करता है।

लेकिन मुझे नहीं पता कि str().encode() और unicode().decode() लिए हैं। क्या कोई भी समझा सकता है, और संभवत: कुछ भी सही कर सकता हूँ जिसे मैंने ऊपर गलत पाया है?

संपादित करें:

कई जवाब स्ट्रिंग पर क्या है। .encode पर जानकारी देते हैं, लेकिन कोई भी नहीं जानता कि क्या। .decode यूनिकोड के लिए है

वेब के समाधान से एकत्रित समाधान "सांकेतिक शब्दों में बदलना / व्याख्यान के बीच अंतर क्या है?"

यूनिकोड स्ट्रिंग्स की decode पद्धति में वास्तव में कोई भी अनुप्रयोग नहीं है (जब तक आपके पास यूनिकोड स्ट्रिंग में कुछ कारण के लिए कुछ गैर-टेक्स्ट डेटा है – नीचे देखें)। यह मुख्य रूप से ऐतिहासिक कारणों के लिए है, मुझे लगता है। पायथन 3 में यह पूरी तरह से चला गया है।

unicode().decode() डिफ़ॉल्ट (एएससीआई) कोडेक का उपयोग करते हुए s अन्तर्निहित एन्कोडिंग प्रदर्शन करेंगे। इसे इस तरह सत्यापित करें:

 >>> 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() भी ज़रूरत से ज़्यादा ज़रूरत नहीं है

लेकिन उत्तरार्द्ध विधि का एक अन्य अनुप्रयोग है जो उपयोगी है: एन्कोडिंग हैं जो कि चरित्र सेटों के साथ कुछ नहीं करना है, और इस प्रकार 8-बिट तारों को एक सार्थक तरीके से लागू किया जा सकता है:

 >>> s.encode('zip') 'x\x9c;\xbc\r\x00\x02>\x01z' 

आप सही हैं, हालांकि: इन दोनों अनुप्रयोगों के लिए "एन्कोडिंग" का अस्पष्ट उपयोग है … अजीब फिर, पायथन 3 में अलग byte और string प्रकार के साथ, यह अब एक समस्या नहीं है।

यूनिकोड स्ट्रिंग को बाइट्स की एक स्ट्रिंग के रूप में दर्शाने के लिए एन्कोडिंग के रूप में जाना जाता है। u'...'.encode(encoding) उपयोग करें u'...'.encode(encoding)

उदाहरण:

     >>> यू'अोर '। एन्कोड (' यूटीएफ 8 ')
     '\ Xc3 \ x83 \ xC2 \ xa6 \ xc3 \ x83 \ xC2 \ xb8 \ xc3 \ x83 \ xC2 \ xa5'
     >>> यू'अोर '। एन्कोड (' latin1 ')
     '\ Xc3 \ xa6 \ xc3 \ xb8 \ xc3 \ xa5'
     >>> यू'अोर '। एन्कोड (' एएससीआई ')
     यूनिकोडएनकोड त्रुटि: 'एएससीआई' कोडेक 0-5 स्थिति में वर्णों को एन्कोड नहीं कर सकता है: 
     क्रमिक संख्या में नहीं (128)

जब आप इसे IO के लिए उपयोग करने की आवश्यकता होती है, तो आमतौर पर एक यूनिकोड स्ट्रिंग सांकेतिक शब्दों में बदलना, उदाहरण के लिए नेटवर्क पर इसे स्थानांतरित करें, या इसे डिस्क फ़ाइल में सहेजें।

यूनिकोड स्ट्रिंग में बाइट्स की स्ट्रिंग कन्वर्ट करने के लिए डीकोडिंग के रूप में जाना जाता है। unicode('...', encoding) या '…' का प्रयोग करें। डीकोड (एन्कोडिंग)

उदाहरण:

    >>> यू'अरो '
    यू '\ xc3 \ xa6 \ xc3 \ xb8 \ xc3 \ xa5' # इंटरप्रेटर यूनिकोड ऑब्जेक्ट की तरह प्रिंट करता है
    >>> यूनिकोड ('\ xc3 \ xa6 \ xc3 \ xb8 \ xc3 \ xa5', 'latin1')
    यू '\ xc3 \ xa6 \ xc3 \ xb8 \ xc3 \ xa5'
    >>> '\ xc3 \ xa6 \ xc3 \ xb8 \ xc3 \ xa5'.decode (' latin1 ')
    यू '\ xc3 \ xa6 \ xc3 \ xb8 \ xc3 \ xa5'

जब भी आप नेटवर्क से या डिस्क फ़ाइल से स्ट्रिंग डेटा प्राप्त करते हैं, तब आप आमतौर पर बाइट्स की स्ट्रिंग डीकोड करते हैं।

मेरा मानना ​​है कि अजगर 3 में यूनिकोड हैंडलिंग में कुछ बदलाव हैं, इसलिए उपरोक्त शायद अजगर 3 के लिए सही नहीं है I

कुछ अच्छे लिंक:

  • पूर्ण न्यूनतम सॉफ्टवेयर डेवलपर बिल्कुल, सकारात्मक रूप से यूनिकोड और कैरेक्टर समूह के बारे में पता होना चाहिए (कोई बहाना नहीं!)
  • यूनिकोड होव्सो

mybytestring.encode (somecodec) कुछ codec के इन मूल्यों के लिए सार्थक है:

  • बेस 64
  • BZ2
  • zlib
  • हेक्स
  • quopri
  • ROT13
  • string_escape
  • तुम तुम

मुझे यकीन नहीं है कि पहले से डिकोड किए गए यूनिकोड पाठ को किस डीकोड करना अच्छा है। कोशिश कर रहा है कि किसी भी एन्कोडिंग के साथ हमेशा सिस्टम की डिफ़ॉल्ट एन्कोडिंग के साथ पहले सांकेतिक शब्दों में बदलना करने का प्रयास करता है

anUnicode। सांकेतिक शब्दों में बदलना ('एन्कोडिंग') एक स्ट्रिंग ऑब्जेक्ट में परिणाम और यूनिकोड ऑब्जेक्ट पर कॉल किया जा सकता है

एक स्ट्रिंग। डीकोड ('एन्कोडिंग') एक यूनिकोड ऑब्जेक्ट में परिणाम और दिए गए एनकोडिंग में एन्कोडेड स्ट्रिंग पर कॉल किया जा सकता है।


कुछ और स्पष्टीकरण:

आप कुछ यूनिकोड वस्तु बना सकते हैं, जिसमें कोई एन्कोडिंग सेट नहीं है। जिस तरह से इसे अजगर द्वारा स्मृति में संग्रहीत किया जाता है, वह आपकी कोई चिंता नहीं है आप इसे खोज सकते हैं, इसे विभाजित कर सकते हैं और किसी स्ट्रिंग को जोड़ते हुए फ़ंक्शन को आप कॉल कर सकते हैं।

लेकिन एक समय आता है, जब आप अपने यूनिकोड ऑब्जेक्ट को कंसोल या कुछ टेक्स्ट फाइल में प्रिंट करना चाहते हैं। तो आपको इसे एनकोड करना होगा (उदाहरण के लिए – UTF-8 में), आप एन्कोड ('यूटीएफ -8') को कॉल करते हैं और आप '\ u / someNumber>' के अंदर एक स्ट्रिंग प्राप्त करते हैं, जो बिल्कुल प्रिंट करने योग्य है।

फिर, फिर से – आप विपरीत करना चाहते हैं – यूटीएफ -8 में एन्कोडेड स्ट्रिंग पढ़िए और इसे यूनिकोड के रूप में मान लें, इसलिए \ u360 एक अक्षर होगा, न कि 5। फिर आप एक स्ट्रिंग (चयनित एन्कोडिंग के साथ) को डीकोड करेंगे और यूनिकोड प्रकार के ब्रांड नए ऑब्जेक्ट प्राप्त करें

बस एक साइड नोट के रूप में – आप कुछ बिगाड़ने वाली एन्कोडिंग का चयन कर सकते हैं, जैसे 'ज़िप', 'बेस 64', 'सड़ांध' और उनमें से कुछ स्ट्रिंग से स्ट्रिंग में कनवर्ट हो जाएंगे, लेकिन मेरा मानना ​​है कि सबसे आम बात यह है कि इसमें यूटीएफ -8 / यूटीएफ -16 और स्ट्रिंग

आपको पायथन यूनिकोडडेकोडएर्रर को पढ़ना चाहिए- मैं गैरसमझाना एन्कोड हूँ स्वीकार्य जवाब पढ़ने के बाद पायथन में यूनिकोड की मेरी समझ बहुत स्पष्ट थी।

कुछ ऐसे एन्कोडिंग हैं जिनका इस्तेमाल डीआर / एन्कोड से str से str या यूनिकोड से यूनिकोड तक करने के लिए किया जा सकता है। उदाहरण के लिए बेस 64, हेक्स या यहां तक ​​कि रोट 13 भी। वे कोडेक मॉड्यूल में सूचीबद्ध हैं।

संपादित करें:

यूनिकोड स्ट्रिंग पर डीकोड संदेश संबंधित सांकेतिक शब्दों में बदलना कार्रवाई को पूर्ववत कर सकता है:

 In [1]: u'0a'.decode('hex') Out[1]: '\n' 

यूनिकोड के बजाय लौटा दिया गया प्रकार str है जो मेरी राय में दुर्भाग्यपूर्ण है। लेकिन जब आप str और यूनिकोड के बीच एक उचित एन / डिकोड नहीं कर रहे हैं तो यह किसी भी तरह से गड़बड़ की तरह दिखता है।