【问题标题】:Writing CSV file with umlauts causing "UnicodeEncodeError: 'ascii' codec can't encode character"使用变音符号写入 CSV 文件导致“UnicodeEncodeError:‘ascii’编解码器无法编码字符”
【发布时间】:2017-06-23 08:21:38
【问题描述】:

我正在尝试编写带有双点(变音符号)的字符,例如 ä、ö 和 Ö。我可以使用data.encode("utf-8") 将其写入文件,但结果b'\xc3\xa4\xc3\xa4\xc3\x96' 并不好(UTF-8 作为文字字符)。我想将"ääÖ" 写入存储到文件中。

如何在 Python 3 中将带有元音变音字符的数据写入 CSV 文件?

import csv
data="ääÖ"
with open("test.csv", "w") as fp:
    a = csv.writer(fp, delimiter=";")
    data=resultFile
    a.writerows(data)

追溯:

File "<ipython-input-280-73b1f615929e>", line 5, in <module>
  a.writerows(data)
UnicodeEncodeError: 'ascii' codec can't encode character '\xe4' in position 15: ordinal not in range(128)

【问题讨论】:

  • encoding='utf-8'打开文件有帮助吗?
  • 尝试添加:#!/usr/bin/env python # -*- coding: utf-8 -*- 看到这个answer
  • @languitar 不,它没有。
  • @terencehill 这不是这里的问题,encoding 参数需要按照 yper 的指示添加到 open 函数中。感谢您的回答!
  • 实际上这不适用于python2X,您是否意识到yper给出的解决方案与上面@languitar建议的完全一样?无论如何,使用 python3 的解决方案接受它是正确的。

标签: python python-3.x csv encoding utf-8


【解决方案1】:

open()中添加参数encoding,并将其设置为'utf8'

import csv

data = "ääÖ"
with open("test.csv", 'w', encoding='utf8') as fp:
    a = csv.writer(fp, delimiter=";")
    a.writerows(data)

编辑:删除了 io 库的使用,因为 open 与 Python 3 中的 io.open 相同。

【讨论】:

  • open也可以设置编码
  • 在 Python 3 中,openio.open 是完全相同的东西。仅在 Python 2 中它们有所不同(io.open 的行为类似于 Python 3 open)。
  • 此解决方案适用于我的 OSX 上的 python3,但使用 python2.7 时出现错误。在调用 open 和编码规范之前设置数据时,错误就在行中。
【解决方案2】:

此解决方案应该适用于 python2 和 3(在 python3 中不需要):

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import csv
data="ääÖ"
with open("test.csv", "w") as fp:
    a = csv.writer(fp, delimiter=";")
    a.writerows(data)

归功于: Working with utf-8 encoding in Python source

【讨论】:

    猜你喜欢
    • 2015-10-21
    • 2010-12-11
    • 2012-07-02
    • 2010-12-11
    • 2021-09-28
    • 2017-02-01
    相关资源
    最近更新 更多