17

मैंने देखा निम्नलिखित धारण:क्या यूनिकोड स्ट्रिंग में केवल ASCII वर्ण होते हैं जो हमेशा ASCII स्ट्रिंग के बराबर होते हैं?

>>> u'abc' == 'abc' 
True 
>>> 'abc' == u'abc' 
True 

हमेशा ऐसा सच हो जाएगा या यह संभवतः सिस्टम स्थान पर निर्भर कर सकता है? (ऐसा लगता है तार अजगर 3 में यूनिकोड हैं: जैसे this question, लेकिन 2.x में बाइट्स) unicode और str के बीच

+0

एएससीआईआई सेट में वर्ण कोडपेज अज्ञेयवादी हैं। यह केवल विस्तारित वर्ण (0x80 से 0xff) है जो स्थानीय लोगों के बीच भिन्न हो सकता है। – Phylogenesis

+5

@ फिजोजेनेसिस: बहुत सारे एन्कोडिंग हैं जो * AS * AS को आधार के रूप में उपयोग नहीं करते हैं। –

उत्तर

13

अजगर 2 coerces जब दो प्रकार की तुलना ASCII कोडेक का उपयोग कर। तो हाँ, यह हमेशा सत्य है।

यह कहना है, जब तक कि आप अपनी पायथन स्थापना को गड़बड़ न करें और उस डिफ़ॉल्ट को बदलने के लिए sys.setdefaultencoding() का उपयोग करें। आप सामान्य रूप से ऐसा नहीं कर सकते हैं, क्योंकि sys.setdefaultencoding() फ़ंक्शन मॉड्यूल से स्टार्ट-अप समय पर हटा दिया गया है, लेकिन वहां एक कार्गो कल्ट है जहां लोग उस फ़ंक्शन को पुनर्स्थापित करने के लिए reload(sys) का उपयोग करते हैं और डिफ़ॉल्ट एन्कोडिंग को किसी अन्य चीज़ को बदलने के लिए बदलते हैं और निहित एन्कोडिंग और डिकोडिंग समस्याओं को ठीक करें। इस कारण से यह एक बेवकूफ चीज है।

+1

'sys.setdefaultencoding()' के साथ वास्तव में क्या गलत है? –

+1

@techtonik: सिस्टम डिफ़ॉल्ट को बदलने से संकुल तोड़ सकते हैं जो डिफ़ॉल्ट रूप से ASCII होने पर भरोसा करते हैं, और इसे केवल * मास्क * बदलते हैं जो आपके कोड को अंतर्निहित एन्कोडिंग और डिकोडिंग पर निर्भर करते हैं। यदि आप इसे लैटिन -1 में सेट करना चाहते हैं तो सभी बाइट-यूनिकोड डिकोडिंग जादुई रूप से काम करते हैं लेकिन वास्तव में यह समझ में नहीं आते हैं, अगर आप इसे यूटीएफ -8 पर सेट करते हैं तो सभी यूनिकोड-बाइट एन्कोडिंग काम करेंगे लेकिन समझ में नहीं आ सकते हैं, आदि। पहली बार अपने पैर को तोड़ने से बचने के बजाय प्रभावी ढंग से अपने पैर को तोड़ने के मामले में पहले से चलाना। –

+0

मुझे [वर्कफ़्लो] (https://xkcd.com/1172/) समस्या की तरह दिखता है। क्या कोई और वास्तविक/स्पष्ट उदाहरण है? –

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