【问题标题】:Two apparently equal Python Unicode UTF8-encoded strings don't match两个明显相等的 Python Unicode UTF8 编码字符串不匹配
【发布时间】:2013-06-27 12:33:24
【问题描述】:
>>> str1 = unicode('María','utf8')
>>> str2 = u'María'.encode('utf8')
>>> str1 == str2
False

这怎么可能?

以防万一,我使用的是 iPython Notebook。

【问题讨论】:

  • 我不知道这是否应该是一个答案,但打印我得到的两个字符串的表示:u'Mar\xeda' / 'Mar\xc3\xada',所以它的表示方式有所不同。

标签: python unicode utf-8


【解决方案1】:

你有一个 unicode 字符串和一个 byte 字符串。它们不是一回事。

一个持有 Unicode 值,María。另一个保存 UTF-8 编码的字节序列,'Mar\xc3\xada'

在比较 Unicode 和字节字符串值时,Python 2 会进行隐式转换,但您不应该指望这种转换,它完全取决于为您的系统设置的默认编解码器。

如果您还不知道 Unicode 到底是什么,或者为什么 UTF-8 不是一回事,或者想了解有关编码的任何其他信息,请参阅:

【讨论】:

    【解决方案2】:

    字符串不能both "Unicode" and "UTF-8 encoded";它们是相互排斥的。因此,不同的字符串。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-17
      • 1970-01-01
      • 1970-01-01
      • 2010-10-01
      • 2015-09-25
      • 1970-01-01
      • 2018-05-27
      • 2012-12-30
      相关资源
      最近更新 更多