1

ユニコードのように見えるwxとpythonに問題があります。

Portablepython2.7.2.1とwx-2.8-msw-unicodeを使用しています。

失敗した時点での私のPythonコードは次のステートメントです:

listbox.AppendText("\n  " + dparser.parse(t['created_at']).strftime('%H-%M-%S') + "    " +t['text'] + "\n")

t['テキスト']

値は次のとおりです。"RT@WebbieBmx:“ @AlexColebornBmx:http : //t.co/cN6zSO69”これを#retweetで見る"

Pythonを実行しているDOSウィンドウに印刷すると、次のように表示されます。

'RT @WebbieBmx:\ xe2 \ x80 \ x9c @ AlexColebornBmx:http : //t.co/cN6zSO69 \ xe2 \ x80 \ x9dwatch this an #retweet'

トレースバックは次のとおりです。

トレースバック(最後の最後の呼び出し):ファイル "myprogs \ Search_db_dev.py"、行713、onSubmit self.toField.GetLineText(0))ファイル "F:\ Portable \ Portable Python 2.7.2.1 \ App \ myprogs\process_form2_dev。 py "、l ine 575、display_Tweets

    listbox.AppendText("\n  " + dparser.parse(t['created_at']).strftime('%H-%M-%
S') + "    " +t['text'] + "\n")

ファイル"F:\ Portable \ Portable Python 2.7.2.1 \ App \ lib \ site-packages \ wx-2.8-msw-uni code \ wx_controls.py"、1850行目、AppendText

   return _controls_.TextCtrl_AppendText(*args, **kwargs)

ファイル"F:\ Portable \ Portable Python 2.7.2.1 \ App \ lib \ encodings \ cp1252.py"、行1 5、

decode return codecs.charmap_decode(input,errors,decoding_table)

UnicodeDecodeError:'charmap'コーデックは73番目のバイト0x9dをデコードできません:文字は未定義にマップされます

UnicodeDecodeErrorは、右二重引用符(\ xe2 \ x80 \ x9d)の最後で発生するようですが、理由がわかりません。助けていただければ幸いです。

単純なエンコーディングの問題かもしれません、私は恐れています

4

2 に答える 2

2

テキストが utf8 であるため (ツイートのテキストを処理するときに予想されるように)、トレースバックを見たときに cp1252 への参照のようなものは私を驚かせました。左側の utf8 シーケンス (\xe2\x80\x9c) はそうではありません問題を引き起こしているようですが、2 番目の 16 進シーケンスの \xe2 の後にスペースがあり、utf8 から適切にデコードされないようです。そのスペースを削除すると、デコードの問題はなくなります。したがって、いくつかの悪い utf8 があります。元のソースから受け取ったときに、try ステートメント内の明示的なデコード以外にどのように保護するかわかりません。これは理にかなっていますか?

于 2012-10-24T23:35:08.353 に答える
0

はい、それは単純なエンコーディングの問題です。

理由がわからないのは、フォントがとを区別していないためu'”'ですu'"'。前者は、'\xe2\x80\x9d'UTF-8にある中途半端な引用符です。これは、「スマートクォート」を実行するエディター(MS Wordなど)でテキストファイルを編集するときに最もよく発生します。

しかし、今問題を見つけたのは良いことです。そうしないと、スクリプトを中国語のユーザーに渡すまで、すべてが機能しているように見えます…</ p>

とにかく、ここでの問題は、UTF-8文字列を格納するコードと、デフォルトのエンコーディング(Windows OEM文字セット)であるかのようにそれらにアクセスしようとする他のコードがあることです。コードをもっと見ることなくして、あなたが間違っていることを正確に確認するのは難しいですが、うまくいけば、これはあなたがそれを追跡するのに十分な情報です。

于 2012-10-24T23:15:32.630 に答える