【发布时间】:2015-07-29 02:23:24
【问题描述】:
我正在尝试输出用户可以使用 excel 打开的 CSV 文件。我已经用 UTF-8 编码了所有字符串,但是当我用 excel 打开文件时,我看到了 jibrish。只有在使用 BOM 将文件转换为 UTF-8(在 Windows 上使用 notepad++)后,我才能正确显示内容。
我正在遵循docs 中的这种模式:
def render_to_csv(self, request, qs):
response = HttpResponse(content_type='text/csv')
response['Content-Disposition'] = 'attachment; filename="test.csv"'
writer = csv.writer(response, delimiter=',')
for row in qs.values_list(*self.fields_to_export):
writer.writerow([unicode(v).encode('utf-8') if v is not None else '' for v in row])
return response
BOM 在哪里适合所有这些?
顺便说一句,SO 上有similar questions,但不幸的是,没有一个人得到答复。
编辑
在@Alastair McCormack 的基础上,我最终在文件开头明确添加了 BOM 字符。唯一的区别是我使用编解码器包而不是硬编码字节。感觉很尴尬,但成功了!
import codecs
def render_to_csv(self, request, qs):
...
response.write(codecs.BOM_UTF8)
...
return response
【问题讨论】: