2

Mac OSX10.8.2Python2.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()
4

2 に答える 2

8

これ\u0308は分音記号の組み合わせです。mac-romanにデコードする前に、Unicode文字列を正規化する必要があります。

import unicodedata

unicodedata.normalize('NFC', projectDict['ProjectName'].decode('utf-8')).encode('mac-roman')

デモ、ä非正規化された形式の文字のエンコード(aおよび分音記号の組み合わせ)を、構成された文字に正規化した後、mac-romanにエンコードします。

>>> unicodedata.normalize('NFC', u'a\u0308').encode('mac-roman')
'\x8a'

私は過去にこの手法を使用して、プラットフォームエンコーディングが事前にわかっている特定のクライアント用のExcel用CSVを作成しました(Excelは現在のWindowsエンコーディングであるIIRCでファイルを解釈します)。その場合、私はにエンコードしましたwindows-1252

于 2012-12-21T14:31:18.940 に答える
0

CSVファイルは実際にはASCIIでのみ作成されます。後でExcelにインポートするためにデータを書き出すだけの場合は、最初にExcelブックとして記述します。これにより、これをいじくり回す必要がなくなります。ある種のもの。

モジュールについては、http://www.python-excel.org/を確認してください。xlwt

于 2012-12-21T14:30:46.490 に答える