使用以下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。
答案 0 :(得分:0)
文本是否正确显示取决于正在绘制的字体是否支持所有Unicode字符。这对你的django来说不是问题。
答案 1 :(得分:0)
第一:我不知道django,所以也许这远远不够。
如果您在文件中写入UTF-8 BOM,请检查您的编写器是否实际输出UTF-8。 Unicode和UTF-8不一样。另外,afaikt,Windows Notepad是否理解UTF-8 BOM,因此您获得“奇怪”字符可能意味着两件事:
a)文件的其余部分不是真正的UTF-8编码,请尝试v.encode('utf-8')
b)字体不支持您尝试显示的字符