3

関連する問題を検索して見つけましたが、Unicode の処理方法が異なるため、問題に解決策を適用できません。

コード全体を貼り付けることはしませんが、この分離されたサンプルコードがエラーを再現していると確信しています: (私は GUI にも wx を使用しているので、これはクラス内のようなものです)

#coding: utf-8
...
something = u'ЧЕТЫРЕ'
//show the Russian text in a Label on the GUI
self.ExampleLabel.SetValue(str(self.something))

Eclipse ではすべてが完全に機能し、ロシア語の文字が表示されます。ただし、ファイルから直接 Python を開こうとすると、CL で次のエラーが発生します。

UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-11: 
ordinal not in range(128)

これは、CLがUnicode文字を出力できず、Eclipseが舞台裏で魔法を行っていることに関係があると考えました。独自に動作するようにする方法について何か助けはありますか?

4

3 に答える 3

5

エンコーディングを指定せずに何かを呼び出すとstr()、デフォルトのエンコーディングが使用されます。これは、プログラムが実行されている環境によって異なります。Eclipse では、コマンド ラインとは異なります。

デフォルトのエンコーディングに頼らず、明示的に指定してください:

self.ExampleLabel.SetValue(self.something.encode('utf-8'))

Python Unicode HOWTOを調べて、エンコーディングを理解str()し、Unicode オブジェクトを処理することをお勧めします。wxPython プロジェクトには、Unicode の使用に関するページもあります。

于 2012-09-02T09:11:16.090 に答える
1

self.something.encode('utf-8')代わりに試してください。

于 2012-09-02T09:10:50.917 に答える
1

str の代わりに repr を使用すると、変換が処理され、オブジェクトが常に文字列型であるとは限らない場合もカバーされますが、余分な引用符のセットまたはコンテキスト内のユニコード u さえも提供される場合があります。 . repr は str よりも安全です - str は ascii エンコーディングを前提としていますが、eval でラップすると元の状態に戻すことになっているため、repr はコードで表示されるのと同じ方法でコードポイントを表示します - repr はほとんどの Python コードは ascii で記述されているため、python コードが存在する形式、つまり ascii セーフであること。

于 2012-09-03T08:42:09.113 に答える