def get_csv(request, id): response = HttpResponse(mimetype='text/csv') response['Content-Disposition'] = 'attachment; filename=csv.csv' writer = unicodecsv.writer(response, encoding='utf-16"') writer.writerow(['Second row', 'A', 'B', 'C', '"Testing"', "ελληνικά"]) return response
记事本++能够毫无问题地打开文件。我做错了什么?
更新:在JD的回答后,我尝试了以下内容:
import csv response = HttpResponse(mimetype='text/csv') response['Content-Disposition'] = 'attachment; filename=test.csv' response.write(u'\ufeff'.encode('utf8')) writer = csv.writer(response, delimiter=';' , dialect='excel') writer.writerow(['Second row', 'A', 'B', 'C', '"Testing"', "ελληνικά"]) return response
仍然没有运气--现在我也可以在Excel中看到BOM(作为grabage)--我也尝试使用unicodecsv和其他一些选项,但再次没有成功:(
writer = unicodecsv.writer(response, delimiter=';' , dialect='excel') writer.writerow(codecs.BOM_UTF16_LE) writer.writerow([ (u'ελληνικά').decode('utf8').encode('utf_16_le')])
UnicodeEncodeError at /csv/559 'ascii' codec can't encode characters in position 0-7: ordinal not in range(128)
response.write(codecs.BOM_UTF16_LE) writer = unicodecsv.writer(response, delimiter=';' , lineterminator='\n', dialect='excel', ) writer.writerow('ελληνικ') writer.writerow([ ('ελληνικά').decode('utf8').encode('utf_16_le')]) #A writer.writerow([ ('ελληνικά2').decode('utf8').encode('utf_16_le'), ('ελληνικά2').decode('utf8').encode('utf_16_le') ]) #B
㯎㮵㯎㮻㯎㮻㯎㮷㯎㮽㯎㮹㯎ελληνικά딊묃묃뜃봃뤃먃갃㈃딻묃묃뜃봃뤃먃갃㈃
使用Python的CSV
模块,您可以编写一个UTF-8文件,如果在文件的开头放置BOM,Excel将正确读取该文件。
with open('myfile.csv', 'wb') as f:
f.write(u'\ufeff'.encode('utf8'))
writer = csv.writer(f, delimiter=';', lineterminator='\n', quoting=csv.QUOTE_ALL, dialect='excel')
...
对于Unicodecsv
也应该使用相同的方法。我认为可以将BOM直接写入httpresponse
对象,如果不能,可以使用stringio
首先写入文件。
编辑:
# -*- coding: utf-8 -*-
import csv
import os
response = open(os.path.expanduser('~/utf8_test.csv'), 'wb')
response.write(u'\ufeff'.encode('utf8'))
writer = csv.writer(response, delimiter=';' , dialect='excel')
writer.writerow(['Second row', 'A', 'B', 'C', '"Testing"', u"ελληνικά".encode('utf8')])
response.close()
我在PHP中使用fputcsv创建了一个CSV文件。文件创建成功,我可以在MacOS中打开文件,没有问题。(我在MacOS中使用数字)。问题是在微软的Excel中,它将所有行显示为合并的一列。 我在代码中将分隔符设置为“;”。 当我按照Microsoft文档中的说明检查语言和区域设置时,分隔符也是“;”。 我还应该检查什么?非常感谢。
问题内容: 我正在尝试在NetBeans 6.0.1中使用OpenCSV解析.csv文件。我的文件包含一些Unicode字符。当我在输出中写入字符时,字符以其他形式显示,例如(HJ1’-E /;)。当我在记事本中打开此文件时,它看起来还可以。 我使用的代码: 问题答案: 首先,您需要知道文件的编码格式,例如UTF-8或UTF-16。生成此文件的原因是什么? 在那之后,它相对简单- 您需要创建一个包
我新安装了Excel 2016,它讨厌CSV文件。它以一栏旗杆风格打开它们,沿着A栏向下,可以看到逗号和语音标记。 突出点: > 我可以在笔记本电脑上创建CSV文件,保存这些文件,然后在笔记本电脑上再次打开它们,一切正常。 即使在记事本中打开它,保存下来,希望某种文件格式正常化,但仍然没有什么好处。 我比较了区域设置和Excel中几乎所有的设置。 我尝试将文件重命名为TXT,它打开了文本文件转换对
问题内容: 我刚刚了解到MySQL具有本地CSV存储引擎,该引擎将数据存储在每个表的逗号分隔值文件中。 是否可以直接从上传的CSV文件创建表格,例如: 用户在哪里上传? 问题答案: 这不可能。要创建表,您需要一个表架构。您拥有的是一个数据文件。无法使用它创建模式。 您可以做的是检查文件中是否有标题行,在这种情况下,您可以使用该标题行手动创建表。 但是,有一种使用批处理文件生成create tabl
我有一个由几张纸组成的excel文件。我需要分别将它们作为单独的数据帧加载。与pd类似的功能是什么。对于此类任务,请阅读“\u csv”(“”)? 附注:由于大小,我不能在excel中复制和粘贴单独的工作表
问题内容: (如果我错过了任何重复的内容,请随时向我指出) 我查看了以下代码段:http : //djangosnippets.org/snippets/365/ 和这个答案: 但是我不知道如何调整它们以适应我的需要:我想压缩多个文件,并希望通过链接(或通过视图动态生成)下载存档。我是Python和Django的新手,所以我不知道该怎么做。 预先感谢! 问题答案: 我已经在Willy链接到的重复问