下载 csv 文件

2016-06-07 22:46:00 +08:00
 lbfeng

生成一个 csv 字符串返回给用户下载,用 excel 打开。

# string 个数动态
csv_file = string_1 + ',' + string_2 + ',' + string_3 + ... + '\n'
response = Response(cvs_file, mimetype='text/csv', headers={'Content-disposition': 'attachment; filename=file_name+'.csv'})
return response

当前遇到的问题是当 string 中有逗号是,逗号后的字符会被当成下一列的内容。每个 string 都加双引号的话没有逗号的 string 在 excel 会显示引号。怎么才能每个 string 在各自的列呢?

当 string 里有中文时, excel 打开会有乱码,转成 utf-8 也没用。

6302 次点击
所在节点    Flask
5 条回复
raptium
2016-06-07 22:49:07 +08:00
虽然 csv 格式比较简单,但是……既然标准库里有 csv 模块,还是可以用一下的吧?

Excel 认 UTF-8 格式的文件似乎要 BOM 头才行,这个不确定了,我生成的直接打开从来都是乱码的……
korvin
2016-06-08 00:20:01 +08:00
我之前用 GBK 编码在 windows 和 mac 的 micsoft office 上没有乱码,在 centos 的 LibreOffice 下乱码。
dyniao
2016-06-08 08:52:50 +08:00
据说不含 BOM 的 UTF-8 才是标准形式,在 UTF-8 文件中放置 BOM 主要是微软的习惯, UTF-8 和 带 BOM 的 UTF-8 的区别就是有没有 BOM 。即文件开头有没有 U+FEFF 。编译成 base64 则为 77u/。


我的问题是这么解决的,生成的时候在 base64 ,后边添加 77u/这几个字符。
`data:application/vnd.csv;base64,5YWs5Y+46YOo6...`

`data:application/vnd.csv;base64,77u/5YWs5Y+46YOo6...`
Neveroldmilk
2016-06-08 09:23:06 +08:00
我记得 excel 需要设定编码类型的,否则用默认的系统编码打开照样是乱码。
Neveroldmilk
2016-06-08 09:23:33 +08:00
@korvin CentOS 默认是 en UTF-8 或者 zh UTF-8.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/284251

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX