2016-05-30 5 views
3

私は、UTF-8としてエンコードされたCSVファイルを保存しています。csv.DictReaderがcsvを読むときに使用されているエンコーディングは?

非アスキー文字[ウムラウト]が含まれています。私が使用してファイルを読んでいます

csv.DictReader(<file>,delimiter=<delimiter>). 

私の質問は以下のとおりです。エンコーディングは、ファイルが読み込まれているもので

  1. 私は、UTF-8などの文字列を参照するために、私は実行する必要があることに気づい:

    str.decode('utf-8') 
    

    は、別のものに変換するには、その後1つのエンコーディングでファイルを読み取り、より良いアプローチは、すなわちありますutf-8

[Pythonのバージョン:2.7]

+0

この回答は私の問題を解決しました:https://stackoverflow.com/questions/5004687/python-csv-dictreader-with-utf-8-data – ThomasW

答えて

1

どのようにこれを達成するために、インスタンスとクラスを使用してはどうですか?

共有ディクショナリをクラスレベルで保存し、BOMファイルマスクの有無にかかわらず、Unicodeテキストファイルをロードしたり、エンコーディングを検出したりすることもできます。

私は、デフォルトでopen()をオーバーライドし、Unicode対応の単純なライブラリを作成しました。

import tendo.unicodeを実行すると、csvライブラリがファイルをロードする方法も変更できます。

ファイルにBOMヘッダーがない場合、ライブラリでは古いasciiの代わりにUTF-8が使用されます。必要に応じて別のフォールバックエンコードを指定することもできます。

1

Python 2.7では、CSVモジュールはデコードを適用しません。ファイルをバイナリモードで開き、バイト文字列を返します。

オンザフライでデコードするhttps://github.com/jdunck/python-unicodecsvを使用します。

それが好きで使用してください:

with open("myfile.csv", 'rb') as my_file:  
    r = unicodecsv.DictReader(my_file, encoding='utf-8') 

rはユニコードの辞書が含まれています。ソースファイルがbinaryモードとして開かれていることが重要です。

関連する問題