如何编码/解码以显示两个“字符串”是否相同?

时间:2016-02-15 09:53:18

标签: python unicode decode encode

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

'Home' == u'Home'

返回true。

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

  

te®

     

te®

第一个是unicode,另一个是unring。

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

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

  

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

1 个答案:

答案 0 :(得分:3)

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

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

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

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

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

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

这将显示重新创建值的Python文字语法,以及由转义序列表示的任何不可打印的非ASCII字节,以便于复制。