【问题标题】: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 437 或codepage 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 字节都由转义序列表示,以便于复制。