Writing unicode data in csv
我知道类似的问题已经被问过很多次了,但是认真地说,我没有能够正确地实现csv编写器,它以csv格式正确地编写(它显示垃圾)。
我正试图使用官方文件中提到的UnicodeWriter。
1 2 3 4
| 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,不好用。有人能帮我一下我在这里做错了什么吗??
- 您确定要用正确的编码查看.csv吗?
- 不,我不确定,我只是打开那个csv文件。如何做到这一点?
- 我使用了Excel的文本导入向导,在那里定义了UTF-8编码,数据显示正确。我们可以在代码中定义csv文件的编码,这样我就不必使用这个向导了吗?另外,如果我使用codecs.open,然后尝试写入unicode数据,那么它将导致问题,这里也提到stackoverflow.com/questions/3085263/…
- 文件的编码似乎没有任何问题。但是,如果要在未设置为Unicode的地方显示文件,则会出现该错误。例如,在Linux设备上,如果我试图在终端上对一个包含非ASCII字符的文件进行分类,当我的区域设置为例如ASCII时,我会收到这样的乱码文本。
- 在大多数编辑器中,您可以在"文件"或"视图"菜单中设置"编码"。例如,在scite中,您可以从文件->编码中选择utf-8。
您正在以UTF-8格式编写一个文件,但您没有在CSV文件中指出这一点。
您应该在文件的开头编写utf-8头文件。添加:
1 2
| ff = open('a.csv', 'w')
ff.write(codecs.BOM_UTF8) |
之后,你的csv文件应该正确打开,让程序读取它。
- FF=open(‘a.csv’,‘w’)FF.write(codecs.bom tf8)writer=unicodewriter(ff)writer.writerow([unicode(‘displaygr&35; 246;&223;en’,‘utf-8’)当我打开文件时,它仍然无法正确显示。我不想使用Excel的导入向导。你的答案是我想要的,但不起作用
- @aamiradnan这是使用excel和utf-8csv文件作为输入的方法。如果您仍然有转换问题,我会怀疑您的python解释器中的o-umlaut在到达unicode()函数之前被转换为ASCII字符,而您在这里被python愚弄了。.py脚本是否以utf-8格式保存?
- @aamiradnan通过在脚本'Displaygr\xc3\xb6ßen'中设置此字符串,尝试使用o-umlaut的Unicode编码版本来确认我怀疑的内容,它将是.py文件的ASCII证明。
- 谢谢你的帮助,是的,你写的我被Python愚弄了。我已经修复了那个脚本编码。但现在我在csv文件中看到了Displaygren,其中öß在word中被省略。我现在只在顶部的脚本中定义编码——编码:utf-8--
- 记事本++将脚本编码显示为encode in ANSI。
- @aamiradnan你说得对,eszett还需要编码来获得输出;如果你处理脚本中的非ASCII字符串,最好的做法就是将脚本保存为utf-8。
- 让我们在聊天中继续讨论
- 使用UTF8时不要编写BOM。
- 他正在为Excel编写utf-8csv文件,因此是的,为这个案例编写一个清单。
用codecs.open打开文件应该可以修复它。
- 我已经写了内容,现在我在Windows上手动打开文件,看看它写了什么。我不需要通过程序打开文件。
- 您的问题可能是编写了错误的内容(在没有编解码器的情况下打开它时可能会出现这种情况),或者您没有正确配置编辑器,但更可能是编写了错误的数据。尝试使用来自codecs.open的文件句柄写入相同的数据。