Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我如何解决独角兽问题?_Python_Unicode_Ascii - Fatal编程技术网

Python 我如何解决独角兽问题?

Python 我如何解决独角兽问题?,python,unicode,ascii,Python,Unicode,Ascii,我花了大约四个小时研究“UnicodeWarning:Unicode不平等比较”问题。通常,几个小时后,我能够自己回答我最棘手的问题,但这里的情况并非如此。当然,我指的是我自己的“诡计多端” 我知道类似的问题在网上和这个网站上都有答案,但是太笨而不能很好地理解答案对我一点帮助都没有。也许对我来说最好的方法就是让别人指出我的代码中需要修改的地方 我在WindowsXP上使用Python2.5 我能想出什么 我知道我的问题与我试图比较苹果和橙子(或者Unicode和ASCII,或者类似的东西,比如字

我花了大约四个小时研究“UnicodeWarning:Unicode不平等比较”问题。通常,几个小时后,我能够自己回答我最棘手的问题,但这里的情况并非如此。当然,我指的是我自己的“诡计多端”

我知道类似的问题在网上和这个网站上都有答案,但是太笨而不能很好地理解答案对我一点帮助都没有。也许对我来说最好的方法就是让别人指出我的代码中需要修改的地方

我在WindowsXP上使用Python2.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!")
以下是我收到的错误消息:

# 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的参数-将其解释为不平等

首先,阅读以下内容:

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

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

actual_answer = u"pureté"

下面是一个返回正确的
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转义的更多详细信息,请参阅Python文档。

如果使用Python 3,变量中的字符串将已经是unicode,并且没有库将返回bytestring。这是Python2。无论哪种方式,OP都明确表示他在WindowsXP上使用Python2.5…非常感谢。我读了这篇文章,明显的结论是UTF-8是我在这里需要的。所以我按照你的建议做了,我的程序现在可以运行了。如果答案存储在数组中呢?例如:“实际答案=答案列表[随机选择][1]”?如何将其转换为Unicode?