这两个字符串在打印时看起来相同,但它们在引擎盖下并不相等。我需要通过这个键选择一个字典项,但我得到 keyError ,因为显然它们不匹配。我曾尝试使用str.encode("utf-8")、str.decode("utf-8")、unicode(str, "utf-8")、repr()。没有任何帮助。我怎样才能让它们像打印时一样相等?谢谢。
>>> str1 = u"extra\u00f1ar"
>>> str2 = u"extrañar"
>>> str1
u'extra\xf1ar'
>>> str2
u'extran\u0303ar'
>>> print str1
extrañar
>>> print str2
extrañar
>>> str1 == str2
False
您可以尝试使用unicodedata.normalize
,但不能保证它有效:
>>> str1 = u'extra\xf1ar'
>>> str2 = u'extran\u0303ar'
>>> str1 == str2
False
>>> print str1; print str2
extrañar
extrañar
所以,观察:
>>> import unicodedata
>>> unicodedata.normalize('NFC', str1)
u'extra\xf1ar'
>>> unicodedata.normalize('NFC', str2)
u'extra\xf1ar'
>>> unicodedata.normalize('NFC', str2) == unicodedata.normalize('NFC', str2)
True
>>> print unicodedata.normalize('NFC', str2); print unicodedata.normalize('NFC', str2)
extrañar
extrañar
一个警告:
即使两个 unicode 字符串被标准化并且对人类读者来说看起来相同,如果一个有组合字符而另一个没有,它们可能不会比较相等。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句