1

つまり、私の場合は次のとおりです。

  • RSS フィードからデータを読み取る
  • コンテンツを端末に出力する

そしてもちろん内容はプレーンASCIIではなくutf-8なので「öäå」みたいな文字が出てきます。しかし、テキストを印刷すると、「\ xe4」のようなエスケープですべてが乱雑になります。エンコーディングと関係がありますが、これについて頭を悩ませることはできません。これはとても簡単なことですが、Google fu にはがっかりさせられます。

1 つの例は、コンテンツを単語ごとに調べて、「ö」という文字を見つけようとしている場合です。次のようにします。

if u"ö" in word:

UnicodeDecodeError: 'ascii' コーデックは位置 6 のバイト 0xc3 をデコードできません...

編集:

だから私は自分の問題を見つけたと思います。フィード項目を取得してから str(entry.content) を実行してそれを渡しましたが、その entry.content は Unicode 文字列を値として持つ辞書を保持するリストでした。辞書コンテンツの表現...

4

3 に答える 3

2

エンコードされたテキストをユニコードと比較しようとしています。Pythonは、エンコードされたテキストがUTF-8であることを認識していないため、ASCIIであると推測し、Unicodeにデコードしようとします。解決策は、適切なエンコーディングで明示的にデコードすることです。

詳細については、 PythonUnicodeHOWTOを確認してください。

私はこのファイルであなたの問題を再現することができます:

# coding: utf-8

word = "öäå"
if u"ö" in word:
    print True

そして、このファイルでそれを修正します:

# coding: utf-8

word = "öäå".decode('utf-8')
if u"ö" in word:
    print True
于 2012-04-04T13:38:32.543 に答える
0

feedparser パッケージを使用してみてくださいhttp://packages.python.org/feedparser/ エンコーディングをうまく処理し、ほぼすべてのフィード形式をサポートします。適切に構造化されたデータを取得するだけです。

于 2012-04-04T16:02:00.590 に答える
0

テキストが UTF-8 であることがわかっている場合は、unicode作業を開始する前にそれをオブジェクトにデコードできます。ファイルからバイトを読み取るとすぐに、decode()文字列のメソッドを使用してそれらをデコードしword.decode('UTF8')、Unicode オブジェクトを返すことができます。

于 2012-04-04T13:39:05.457 に答える