在我的程序中,我将字符串与unicode进行比较,对于大多数情况,它工作正常(我得到True,如预期的那样)。
'Home' == u'Home'
返回true。
但是,以下两个对象被认为是不同的:
te®
te®
第一个是unicode,另一个是unring。
这些对象应该是相同的。有没有办法转换其中一个对象,使比较返回true?
顺便说一下,比较会返回以下错误消息:
UnicodeWarning:Unicode等同比较无法转换两者 Unicode的参数 - 将它们解释为不相等
答案 0 :(得分:3)
是的,比较将使用ASCII作为默认编解码器。使用实际编解码器在比较时显式解码bytestring。
您必须首先找出正确的编解码器,这取决于上下文。例如,如果您的数据来自URL,则服务器可能已在内容类型标头中为您提供了正确的编解码器。如果它来自XML文档,请使用XML解析器,该解析器将注意作为XML文档一部分的编码信息等。
在您的情况下,如果您将第二个字符串解释为解码为Mojibake或codepage 437的codepage 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字节,以便于复制。