【问题标题】:How to encode / decode to show that both "strings" are the same?如何编码/解码以显示两个“字符串”是相同的?
【发布时间】:2016-02-15 09:53:17
【问题描述】:

在我的程序中,我将字符串与 unicode 进行比较,在大多数情况下它都可以正常工作(我得到了 True,正如预期的那样)。

'Home' == u'Home'

返回真。

但是,以下两个对象被认为是不同的:

te®

te®

第一个unicode,另一个是tring。

这些对象应该是相同的。有没有办法转换其中一个对象以使比较返回 true?

顺便说一下,比较返回以下错误信息:

UnicodeWarning:Unicode 相等比较未能同时转换两者 Unicode 的参数 - 将它们解释为不相等

【问题讨论】:

    标签: python unicode decode encode


    【解决方案1】:

    是的,比较将使用 ASCII 作为默认编解码器。比较时使用实际编解码器显式解码字节串。

    不过,您必须先找出正确的编解码器,这取决于上下文。例如,如果您的数据来自 URL,则服务器可能在内容类型标头中为您提供了正确的编解码器。如果它来自 XML 文档,请使用 XML 解析器,它会注意作为 XML 文档的一部分的编码信息等。

    如果您将第二个字符串解释为解码为codepage 437codepage 850 的UTF-8 字节的Mojibake,则您的情况似乎是UTF8:

    >>> print u'te®'.encode('utf8').decode('cp437')
    te®
    

    它可能仍然是一个不同的代码页,但您不应该真正将字节字符串打印到您的 Windows 控制台来确定它们的内容无论如何。调试时始终使用repr()函数:

    >>> print repr(u'te®'.encode('utf8'))
    'te\xc2\xae'
    

    这向您展示了用于重新创建值的 Python 文字语法,任何不可打印的非 ASCII 字节都由转义序列表示,以便于复制。

    【讨论】:

      猜你喜欢
      • 2012-11-07
      • 1970-01-01
      • 2012-07-19
      • 1970-01-01
      • 2018-07-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-26
      • 1970-01-01
      相关资源
      最近更新 更多