unicode - Python UTF-8 comparison -


  ए = {"a": "çö"} b = "çö" a ['a'] & gt ; & gt; & gt; '\ Xc3 \ xa7 \ xc3 \ xb6' b.decode ('utf-8') == एक ['ए']>> gt; & gt; & gt; झूठी  

वहां क्या हो रहा है?

संपादित करें = मुझे खेद है, यह मेरी गलती थी। यह अभी भी गलत है मैं उबंटु 10.04 पर पायथन 2.6 का उपयोग कर रहा हूं।

संभावित समाधान

या तो लिखना इस तरह से:

  a = {"a": u "çö"} b = "çö" b.decode ('utf-8') == एक ['ए']   

या इस तरह से (आप दोनों कोड पर .decode ('utf-8') भी छोड़ सकते हैं):

  a = {"A": "çö"} b = "çö" b.decode ('utf-8') == एक ['ए']। डीकोड ('यूटीएफ -8')  

या इस तरह मेरी (मेरी सिफारिश):

  a = {"a": u "çö"} b = u "çö" b == a ['a']   

स्पष्टीकरण

टिम की टिप्पणी के आधार पर अपडेट किया गया। आपके मूल कोड में, b.decode ('utf-8') == U'cö ' और a [' a '] ==' çö ', तो आप वास्तव में निम्न तुलना कर रहे हैं:

  u' Çö '==' çö ' 

वस्तुओं में से एक प्रकार यूनिकोड है, अन्य प्रकार की str है, इसलिए तुलना को निष्पादित करने के लिए, str को यूनिकोड और फिर दो यूनिकोड वस्तुओं की तुलना की जाती है। यह विशुद्ध रूप से एएससीआईआई तार के मामले में ठीक काम करता है, उदाहरण के लिए: u'a '==' a ', चूंकि यूनिकोड (' ए ') == यू'ए'

हालांकि, यह u'sa '==' çö ' के मामले में विफल हो जाता है, क्योंकि यूनिकोड (' çö ') निम्नलिखित देता है त्रुटि: यूनिकोडडेकोड एर्रर: 'एएससीआई' कोडेक स्थिति 0 में बाइट 0xc3 डीकोड नहीं कर सकता है: क्रम में नहीं है (128) , और इसलिए पूरी तुलना झूठी देता है और निम्न चेतावनी का कारण बनता है: यूनिकोड चेतावनी : यूनिकोड की समान तुलना दोनों तर्कों को यूनिकोड में परिवर्तित करने में असफल रही - उन्हें असमान के रूप में व्याख्या करना


Comments

Popular posts from this blog

Eclipse CDT variable colors in editor -

AJAX doesn't send POST query -

wpf - Custom Message Box Advice -