2010-07-06 72 views
0

Python的unicode的问题具有生成从数据库视图CSV响应下面的Django视图代码:在Windows XP

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

您是否在每个操作系统中尝试了多个浏览器?例如,Opera,Chrome和Firefox都运行在它们之中 - 浏览器特定的“怪异字符”问题是什么?如果您下载CSV并直接在Excel或OOO中打开它,这是否仍然很奇怪 - 或者在浏览器中看起来很奇怪......? – 2010-07-06 15:26:04

+0

@Alex它并不重要,我用它来打开它。问题是只有win xp将文件视为ASCII文本而不是unicode。当我用记事本打开它并使用保存将它保存为unicode编码的文本文件时,一切看起来都很好。所以编写一个字节顺序标记没有任何帮助。我假设我必须指示浏览器在响应头中是unicode编码的文件。 – Vasil 2010-07-06 16:48:14

回答

0

文本是否正确显示取决于正在绘制的字体是否支持所有Unicode字符。这对你的Django来说不是问题。

0

第一:我不知道django,所以也许这很遥远。

检查您的编写者是否实际输出UTF-8,如果您在文件中写入UTF-8 BOM。 Unicode和UTF-8不一样。另外,afaikt,Windows记事本是否能够理解UTF-8的BOM,因此您得到“奇怪”的字符可能意味着两件事:

a)文件的其余部分不是真正的UTF-8编码,请尝试v.encode('utf-8')

b)您尝试显示的字符不受字体支持