2

「UnicodeWarning: Unicode 不等比較」問題の調査に約 4 時間を費やしました。通常、数時間後には、最もトリッキーな質問に自分で答えられるようになりますが、今回はそうではありませんでした。もちろん、私は自分自身にとって「トリッキー」を意味します。;-)

同様の質問がオンラインやこのサイトでも回答されていることは知っていますが、初心者すぎて回答をよく理解できないため、まったく役に立ちません。おそらく、私がそれを取得するための最良の方法は、私のコードで何を変更する必要があるかを誰かに指摘してもらうことです.

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代わりに使用してください。

3 つ目は、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')

また、ユニコードエスケープを使用してみましたか?

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

于 2013-01-14T00:49:44.323 に答える