【问题标题】:How do I solve the UnicodeWarning issue?如何解决 UnicodeWarning 问题?
【发布时间】:2013-01-14 00:36:36
【问题描述】:

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

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

我在 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 的参数 - 将它们解释为不相等

【问题讨论】:

  • 如果在 Python 3 中,变量中的字符串已经是 unicode,并且没有库会返回字节串。这是 Python 2。
  • 无论哪种方式 OP 都清楚地表明他在 Windows XP 上的 Python 2.5 上......

标签: python unicode ascii


【解决方案1】:

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

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

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

actual_answer = u"pureté"

【讨论】:

  • 非常感谢。我读了这篇文章,很明显的结论是 UTF-8 是我需要的。所以我按照你的建议做了,我的程序现在可以工作了。
  • 如果答案存储在数组中怎么办?例如:“actual_answer = answer_list[random_choice][1]”?如何将其转换为 Unicode?​​span>
【解决方案2】:

这是一个返回正确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 文档。 http://docs.python.org/2/howto/unicode.html

【讨论】:

    猜你喜欢
    • 2016-11-15
    • 2011-01-04
    • 2012-03-22
    • 2021-12-22
    • 2017-10-04
    • 2020-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多