2012-04-04 11 views
0

だから要するに私の場合はこれです:RSSフィードからのPython 2.7エンコーディングとfeedparser

  • 読むデータターミナル

から

  • 印刷コンテンツをそしてもちろん、コンテンツはではありませんプレーン・アスキー、それはutf-8なので、 "öäå"のような文字が得られます。しかし、私がテキストを印刷すると、 '\ xe4'のようなecapeですべてが絡んでしまいます。エンコーディングと何かが関係していますが、私はこのことについて私の頭を得ることはできません。これはまだGoogleのフーが私を失望させることは非常に些細でなければなりません。私が実行します:

    だけ与え
    if u"ö" in word: 
    

    :UnicodeDecodeErrorを:「ASCII」コーデックは」することができます私は、言葉によるコンテンツの単語を通過すると、文字「O」を見つけようとしているとき、一つの例がある

    6位T・デコード・バイト0xc3 ...

    編集:

    だから、私は私の問題を発見したと思います。私はフィード項目を取得してstr(entry.content)を実行し、それ以降は渡しましたが、そのentry.contentはunicode文字列を持つ辞書を値として保持していたので、私が行ったことはascii辞書コンテンツの表現...

  • +0

    http://nedbatchelder.com/text/unipain.html –

    答えて

    2

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

    詳細についてはPython Unicode HOWTOをご覧ください。あなたのテキストはUTF-8であることがわかっている場合は、あなたにそれを解読することができます

    # coding: utf-8 
    
    word = "öäå".decode('utf-8') 
    if u"ö" in word: 
        print True 
    
    +0

    私の問題は、単語の内容が "öäå"でなければならないと思うが、私がパーサーから得たものは '\ xe4'のようなエスケープである。彼らはstrの型ですが、私はユニコードを持つべきだと思います。だから、私はこれらのエスケープを実際の表現に変換する方法が必要です。あるいは、この問題を頭痛から取り除いて、何か似たようなものがあります。D – Guu

    +0

    問題は自分の失敗とRTFMへの対応不能によるものですが、私はまだこれを受け入れています。 – Guu

    +0

    @ GUu REPLや端末にエスケープとして表示されているからといって、彼らがeascapeとして保存されているわけではありません。そうではありません。これは、ASCII環境で128以上のバイト値がどのように表示されるかです。 – agf

    0

    # coding: utf-8 
    
    word = "öäå" 
    if u"ö" in word: 
        print True 
    

    そして、このファイルを使用してそれを修正:

    私は、このファイルを使用して問題を再現することができますunicodeオブジェクトを使用して作業を開始する必要があります。ファイルからバイトを読み込むとすぐに、decode()の文字列メソッドを使用してそれらをデコードし、word.decode('UTF8')としてユニコードオブジェクトを返すことができます。

    0

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