【问题标题】:Python unicode problems on Windows XPWindows XP 上的 Python unicode 问题
【发布时间】: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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    首先:我不了解 django,所以这可能还很遥远。

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-16
      • 1970-01-01
      • 2011-04-26
      • 1970-01-01
      • 1970-01-01
      • 2013-01-27
      • 1970-01-01
      • 2023-04-01
      相关资源
      最近更新 更多