2

我花了大约四个小时研究“UnicodeWarning: Unicode unequal comparison”问题。通常,几个小时后,我可以自己回答最棘手的问题,但这里并非如此。当然,我的意思是对我自己来说“棘手”。;-)

我知道类似的问题在网上和这个网站上都有回答,但是太菜鸟无法很好地理解答案对我一点帮助都没有。也许对我来说最好的方法就是让某人指出我的代码中需要更改的内容。

我在 Windows XP 上使用 Python 2.5。

我能弄清楚的

我知道我的问题与我试图比较苹果和橙子(或 Unicode 和 ASCII,或类似的东西,比如字节)有关。我不知道解决这个问题的实用方法。

这是我的代码:

# coding: iso-8859-1
import sys
from easygui import *

actual_answer = "pureté"
answer_given = enterbox("Type your answer!\n\nHint: 'pureté'")

if answer_given == actual_answer:
    msgbox("Correct! The answer is 'pureté'")
else:
    msgbox("Bug!")

这是我收到的错误消息:

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

4

2 回答 2

1

首先,请阅读: http ://www.joelonsoftware.com/articles/Unicode.html

iso-8859-1 然后 -在任何系统中处理 Python 时,您都不应该真正使用编码 -utf-8改为使用。

第三,您的easygui组件返回一个 unicode 对象而不是字节字符串。在上面的代码中解决这个问题的最简单方法是使actual_answer变量成为一个 unicode 对象,但在引号前加上一个“u”,例如:

actual_answer = u"pureté"
于 2013-01-14T00:46:57.707 回答
0

这是一个返回正确utf-8格式的函数:

  def utf8(str):
      return unicode(str, 'latin1').encode('utf-8')

另外,您是否尝试过使用 unicode 转义?

print "puret\u00E9".decode("unicode_escape")

例如,您可以将其应用于您的代码,如下所示:

# coding: iso-8859-1
import sys
from easygui import *

actual_answer = "puret\u00E9".decode("unicode_escape")
answer_given = enterbox("Type your answer!\n\nHint: " + actual_answer)

if answer_given == actual_answer:
    msgbox("Correct! The answer is " + actual_answer)
else:
    msgbox("Bug!")

有关 Unicode Escapes 的更多详细信息,请参阅 Python 文档。 http://docs.python.org/2/howto/unicode.html

于 2013-01-14T00:49:44.323 回答