python - 编码,打印无法搞清楚

时间:2018-02-26 07:32:20

标签: python unicode printing python-2.x

这两个字符串在打印时看起来相同,但它们在引擎盖下不相等。我需要通过此键选择一个字典项,但我得到keyError,因为显然它们不匹配。我尝试过使用 str.encode(“utf-8”) str.decode(“utf-8”) unicode(str,“utf- 8“) repr()。什么都没有帮助。我怎样才能使它们等同于 print ed?感谢。

>>> 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

1 个答案:

答案 0 :(得分:2)

您可以尝试使用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

一个caveat

  

即使两个unicode字符串被规范化并且看起来与a相同   人类读者,如果一个人结合了角色而另一个没有,   他们可能无法比较平等。