使用UTF-8编码格式的Python CSV写入器

3

我正在尝试将一些内容写入CSV文件中,这是发生的情况:

在下面的程序中,理想情况下,“Eéntalige affiche in Halle !!”应该被写入CSV文件。但是,它却写成了“Eéntalige affiche in Halle !!”。

# -*- encoding: utf-8 -*-
import csv
S="Eéntalige affiche in Halle !!".encode("utf-8")
file=c = csv.writer(open("Test.csv","wb"))
file.writerow([S])

在CSV文件中==?“Halle的单语海报!!”

你使用的Python版本是什么?我在第三行看到了一个Unicode解码错误。 - Dhara
@Dhara:在Python 3中它运行良好。但这并不是Python的错。 - Martijn Pieters
@MartijnPieters 因此我才问... 我使用的是Python 2.7 - Dhara
1个回答

3

您正在正确编写数据。问题在于无论是什么读取数据的程序,它都将UTF-8编码的数据解释为Latin 1编码。

>>> print('E\xe9ntalige affiche in Halle !!')
Eéntalige affiche in Halle !!
>>> 'E\xe9ntalige affiche in Halle !!'.encode('utf8')
b'E\xc3\xa9ntalige affiche in Halle !!'
>>> print('E\xe9ntalige affiche in Halle !!'.encode('utf8').decode('latin1'))
Eéntalige affiche in Halle !!

U+00E9代码点(é,带音调的小写拉丁字母e)在UTF-8中编码为两个字节,分别为C3和A9。如果您将这两个字节视为Latin1,则每个字符始终只有一个字节,您会得到Ã和©。
对于如何处理CSV文件和编码,没有标准规定,您需要根据目标应用程序进行编码调整以读取此信息。例如,Microsoft Excel根据当前代码页读取CSV文件。
如果您的CSV阅读器期望使用Latin 1,则请改为进行Latin 1编码。

在LibreOffice中工作完美,但在MS Excel中不起作用。谢谢大家 :) - dora
谢谢Martijn - 这帮助我解决了一个问题,Excel没有正确读取数据,我一直以为是Python代码的问题。 - jamesc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接