【问题标题】:Writing unicode data in csv在 csv 中写入 unicode 数据
【发布时间】:2012-05-15 22:34:32
【问题描述】:

我知道类似的问题已被问过很多次,但严重的是我无法正确实现在 csv 中正确写入的 csv writer(它显示垃圾)。

我正在尝试使用 official docs 中提到的 UnicodeWriter。

ff = open('a.csv', 'w')
writer = UnicodeWriter(ff)
st = unicode('Displaygrößen', 'utf-8') #gives (u'Displaygr\xf6\xdfen', 'utf-8')
writer.writerow([st])

这不会给我任何解码或编码错误。但是它把Displaygrößen这个词写成Displaygrößen,这是不好的。任何人都可以帮助我在这里做错了什么吗?

【问题讨论】:

  • 您确定您正在以正确的编码查看 a.csv吗?
  • 不,我不确定,我只是打开那个 csv 文件。该怎么做?
  • 我使用了excel的文本导入向导,并在那里定义了utf-8编码,数据显示正确。我们可以在代码中定义 csv 文件的编码,这样我就不必使用这个向导了吗?另外,如果我使用 codecs.open 然后我尝试写入 unicode 数据,那么它会导致问题,这里也提到了stackoverflow.com/questions/3085263/…
  • 文件的编码似乎没有任何问题。如果您在未设置为 unicode 的地方显示文件,您会收到该错误。例如,在 Linux 机器上,当我的语言环境设置为例如 ASCII 时,如果我尝试在终端上对包含非 ASCII 字符的文件进行分类,我会得到这样的乱码。
  • 在大多数编辑器中,您可以在“文件”或“查看”菜单中设置“编码”。例如。在 Scite 中,您可以从 File->Encoding 中选择 utf-8。

标签: python csv python-2.7


【解决方案1】:

您正在编写一个 UTF-8 格式的文件,但您没有在 csv 文件中指明这一点。

您应该在文件的开头写上 UTF-8 标头。添加这个:

ff = open('a.csv', 'w')
ff.write(codecs.BOM_UTF8)

然后您的 csv 文件应该会在程序尝试读取它之后正确打开。

【讨论】:

  • ff = open('a.csv', 'w') ff.write(codecs.BOM_UTF8) writer = UnicodeWriter(ff) writer.writerow([unicode('Displaygrößen', 'utf- 8')]) 并且当我打开文件时它仍然无法正确显示。我不想使用 excel 的导入向导。你的答案是我想要的,但它不起作用
  • @AamirAdnan 这是使用 Excel 和 UTF-8 csv 文件作为输入的方法。如果您仍然有转换问题,我会怀疑您的 Python 解释器中的 o-umlaut 在到达 unicode() 函数之前被翻译成 ascii 字符,而您在这里被 Python 愚弄了。您的 .py 脚本是否以 utf-8 格式保存?
  • @AamirAdnan 尝试通过在脚本中设置此字符串'Displaygr\xc3\xb6ßen' 使用 o-umlaut 的 unicode 编码版本来确认我的怀疑,它将是 .py 文件 ascii-proof
  • 感谢您的所有帮助,是的,您写的是我被 Python 愚弄了。我已经修复了该脚本编码。但现在我在 csv 文件中看到Displaygren,其中öß 被单词省略了。我现在只在顶部的脚本中定义编码 # -- coding: utf-8 --
  • @AamirAdnan 你是对的,Eszett 还需要进行编码才能获得输出;如果您在自己的脚本中处理非 ascii 字符串,那么最好的做法就是将您的脚本保存为 utf-8。
【解决方案2】:

使用codecs.open 打开文件应该可以修复它。

【讨论】:

  • 我已经写了内容,现在我在 Windows 上手动打开文件以查看它写了什么。我不需要通过程序打开文件。
  • 要么你的问题是写入了错误的内容(当你打开它时可能是这种情况没有编解码器)或者你没有正确配置你的编辑器,但是写入错误数据的可能性更大。尝试使用来自codecs.open的文件句柄写入相同的数据
猜你喜欢
  • 2017-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-03
  • 1970-01-01
  • 2017-03-28
相关资源
最近更新 更多