我在Mac OS X 10.8.2上使用Python 2.7.2。我需要编写一个 .csv 文件,该文件通常包含几个“元音变音”,如 ä、ö 和 ü。当我编写 .csv 文件时,Numbers 和 Open Office 都能够正确读取 csv 并且还可以毫无问题地显示变音符号。
但如果我用 Microsoft Excel 2004 阅读它,文字会显示如下:
TuÃàrlersee
我知道,Excel 在处理 UTF-8 时存在问题。我读到 2007 以下的 Excel 版本无法正确读取 UTF-8 文件,即使您设置了 UTF-8 BOM(字节顺序标记)。我正在使用以下行设置 UTF-8 BOM:
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>
如何将这些数据导出到 Excel 能够正确读取元音变音的 .csv 文件中?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()