具有 utf-8 代码格式的 Python CSV 编写器

标签 python csv utf-8

我正在尝试用荷兰语将一些内容写入 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 文件中== ? “哈勒的 Eéntalige affiche !!”

最佳答案

您正在正确写入数据。问题在于正在读取数据的任何东西;它将 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。

关于具有 utf-8 代码格式的 Python CSV 编写器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14833660/

相关文章:

php - 使用php将csv文件导入mysql数据库

mysql - UTF-8字符有问题;我看到的不是我存储的

java - 在Java中将编码UTF-8的字符串转换为TIS620(泰语编码)。有哪些方法可以做到这一点并且不会丢失数据?

python - 为什么 matplotlib 给出错误 [<matplotlib.lines.Line2D object at 0x0392A9D0>]?

python - 将 sqlalchemy 行对象转换为 python dict

javascript - 如何在 csv 对象数据中插入 header 以使用 d3.js 进行管理

C 中球队的球员组合

python - 统一码编码错误 : 'ascii' codec can't encode characters in position 0-5: ordinal not in range(128)

python - 使用Python将OpenCV cv.Rectangle(img,pt1,pt2)转换为NumPy数组

python - Python 中的类与实例初始化