如何编码/解码以显示两者 "strings" 相同?
How to encode / decode to show that both "strings" are the same?
在我的程序中,我将字符串与 unicode 进行比较,在大多数情况下它工作正常(如预期的那样,我得到 True)。
'Home' == u'Home'
returns 是的。
但是,以下两个对象被认为是不同的:
te®
te®
第一个unicode,另一个是tring。
这些对象应该是相同的。有没有办法转换其中一个对象,使比较 returns 为真?
顺便比较一下returns错误信息如下:
UnicodeWarning: Unicode equal comparison failed to convert both
arguments to Unicode - interpreting them as being unequal
是的,比较将使用 ASCII 作为默认编解码器。在比较时使用 actual 编解码器显式解码字节串。
不过,您必须先找出正确的编解码器,这取决于上下文。例如,如果您的数据来自 URL,则服务器可能在 content-type header 中为您提供了正确的编解码器。如果它来自 XML 文档,请使用 XML 解析器,它会注意作为 XML 文档的一部分的编码信息,等等
在你的情况下,如果你将第二个字符串解释为 Mojibake of UTF-8 bytes decoded as codepage 437 or codepage 850:
,你似乎有 UTF8
>>> print u'te®'.encode('utf8').decode('cp437')
te®
它可能仍然是一个不同的代码页,但您不应该真正将字节串打印到您的 Windows 控制台来确定它们的内容 无论如何。调试时总是使用repr()
函数:
>>> print repr(u'te®'.encode('utf8'))
'te\xc2\xae'
这向您展示了Python re-create 值的文字语法,任何 non-printable non-ASCII 字节都由转义序列表示,以便于复制。
在我的程序中,我将字符串与 unicode 进行比较,在大多数情况下它工作正常(如预期的那样,我得到 True)。
'Home' == u'Home'
returns 是的。
但是,以下两个对象被认为是不同的:
te®
te®
第一个unicode,另一个是tring。
这些对象应该是相同的。有没有办法转换其中一个对象,使比较 returns 为真?
顺便比较一下returns错误信息如下:
UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal
是的,比较将使用 ASCII 作为默认编解码器。在比较时使用 actual 编解码器显式解码字节串。
不过,您必须先找出正确的编解码器,这取决于上下文。例如,如果您的数据来自 URL,则服务器可能在 content-type header 中为您提供了正确的编解码器。如果它来自 XML 文档,请使用 XML 解析器,它会注意作为 XML 文档的一部分的编码信息,等等
在你的情况下,如果你将第二个字符串解释为 Mojibake of UTF-8 bytes decoded as codepage 437 or codepage 850:
,你似乎有 UTF8>>> print u'te®'.encode('utf8').decode('cp437')
te®
它可能仍然是一个不同的代码页,但您不应该真正将字节串打印到您的 Windows 控制台来确定它们的内容 无论如何。调试时总是使用repr()
函数:
>>> print repr(u'te®'.encode('utf8'))
'te\xc2\xae'
这向您展示了Python re-create 值的文字语法,任何 non-printable non-ASCII 字节都由转义序列表示,以便于复制。