Windows XP上的Python unicode问题

时间:2010-07-06 14:49:35

标签: python windows django unicode

使用以下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

2 个答案:

答案 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)字体不支持您尝试显示的字符