Mac OSX10.8.2でPython2.7.2を使用しています。ä、ö、üなどのいくつかの「ウムラウト」を含むことが多い.csvファイルを作成する必要があります。.csvファイルを作成すると、NumbersとOpen Officeはすべてcsvを正しく読み取ることができ、問題なくUmlautsを表示することもできます。
しかし、Microsoft Excel 2004で読んだ場合、単語は次のように表示されます。
TuÃàrlersee
私は知っている、ExcelはUTF-8を扱うのに問題がある。UTF-8 BOM(Byte Order Marker)を設定していても、2007より前のバージョンのExcelではUTF-8ファイルを正しく読み取れないということを読みました。次の行でUTF-8BOMを設定しています。
e.write(codecs.BOM_UTF8)
したがって、次のステップとして試したのは、UTF-8ファイルとしてエクスポートする代わりに、文字エンコードをmac-romanに設定したかったことです。次の行で、utf-8から値をデコードし、mac-romanで再エンコードしました。
projectName = projectDict['ProjectName'].decode('utf-8').encode('mac-roman')
しかし、次のエラーが発生します。
UnicodeEncodeError: 'charmap' codec can't encode character u'\u0308' in position 6: character maps to <undefined>
このデータを.csvにエクスポートして、ExcelがUmlautsも正しく読み取ることができるようにするにはどうすればよいですか?Pythonは、UTF-8のすべてを内部的に処理します。または、デコード/エンコードを正しく理解していない可能性があります。Python 3.0では、エンコーディング/デコーディングモデル全体を適応させましたが、バージョン2.7.2のままにする必要があります。
私はそのようなDictWriterを使用しています:
w = csv.DictWriter(e, fieldnames=fieldnames, extrasaction='ignore', delimiter=';', quotechar='\"', quoting=csv.QUOTE_NONNUMERIC)
w.writeheader()