代码之家  ›  专栏  ›  技术社区  ›  Vasil

Windows XP上的python unicode问题

  •  0
  • Vasil  · 技术社区  · 14 年前

    具有以下从数据库视图生成csv响应的django视图代码:

    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打开它时,我可以正确地看到文本。但是,使用WindowsXP奇怪的字符下载和打开文件会出现在非ASCII文本的位置。使用Linux上的OpenOffice将文件从csv转换为xls,并在Windows XP上打开文件,将得到一个可读的文件(没有奇怪的字符)。

    我看不到这里缺少什么,因为我不使用Win XP。有人经历过类似的事情吗?

    描述了我使用的UnicodeWriter类 here 在底部。

    2 回复  |  直到 14 年前
        1
  •  0
  •   Nathan    14 年前

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

        2
  •  0
  •   knitti freethinker    14 年前

    第一:我不认识姜戈,所以可能离这儿很远。

    如果在文件中写入一个utf-8bom,请检查编写器是否实际输出了utf-8。Unicode和UTF-8不同。此外,afaikt,Windows记事本是否理解UTF-8 BOM,因此获得“奇怪”字符可能意味着两件事:

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

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