【发布时间】:2010-07-06 14:49:35
【问题描述】:
具有以下 django 视图代码,可从数据库视图生成 CSV 响应:
def _get_csv_stats(request, **filterargs):
result = GlobalStats.objects.select_related().filter(**filterargs).values_list('user__username',
'user__first_name','user__last_name',
'center__name', 'action_name',
'action_date').annotate(num = Count('id')).order_by("action_date")
response = HttpResponse(mimetype = 'text/csv')
response.write( codecs.BOM_UTF8 )
response['Content-Disposition'] = 'attachment; filename=statistcs.csv'
writer = UnicodeWriter(response)
for value in result:
writer.writerow([unicode(v) for v in value])
return response
某些列包含 utf8 文本。当我下载文件并使用 Linux 或 Mac OS X 打开它时,我可以正确看到文本。但是使用windows XP下载和打开文件时会出现奇怪字符代替非ASCII文本。在 linux 上使用 Open Office 将文件从 csv 转换为 xls 并在 windows xp 上打开文件将得到一个可读文件(没有奇怪的字符)。
我看不到我在这里缺少什么,因为我不使用 win XP。有没有人经历过类似的事情?
我正在使用的 UnicodeWriter 类在底部描述为 here。
【问题讨论】:
-
您是否在每个操作系统中尝试过多个浏览器?例如,Opera、Chrome 和 Firefox 都在它们上面运行——“奇怪的字符”问题是浏览器特有的吗?如果您下载 CSV 并直接在Excel 或OOO 中打开它,它是否仍然很奇怪——或者它只是在浏览器中看起来很奇怪...?
-
@Alex 我用什么来打开它并不重要。问题是只有 win xp 将文件视为 ASCII 文本而不是 unicode。当我用记事本打开它并使用 save as 将其另存为 unicode 编码的文本文件时,一切看起来都很好。所以写一个字节顺序标记没有任何帮助。我假设我必须在响应标头中指示浏览器它是 unicode 编码文件。
标签: python windows django unicode