在Ex中正确呈现Flask生成的CSV文件

2024-04-20 12:57:30 发布

您现在位置:Python中文网/ 问答频道 /正文

下面是一个生成CSV(python2.7)的flask视图的最小示例。在

# -*- coding: utf-8 -*-

import csv
import StringIO

from flask import Flask, Response

app = Flask(__name__)


@app.route('/example.csv')
def example_csv():
    f = StringIO.StringIO()
    writer = csv.writer(f)
    writer.writerow(['Header 1', 'Header 2', 'Header 3'])
    writer.writerows([unicode(_).encode('utf-8') for _ in row] for row in (['1', '2', '3'], 
                                                                           ['a', 'b', 'c'],
                                                                           [u'£', u'€', u'¥']))
    response = Response(f.getvalue(), mimetype='text/csv')
    response.headers['Content-Disposition'] = u'attachment; filename=example.csv'
    return response


if __name__ == '__main__':
     app.run(debug=True)

在Excel中打开可以得到:

^{pr2}$

在苹果的数字应用程序中,最后一行显示正确。如何使Excel正确呈现?我缺少某种编码设置吗?在


Tags: csvnameinimportappflaskforexample
1条回答
网友
1楼 · 发布于 2024-04-20 12:57:30

Is it possible to force Excel recognize UTF-8 CSV files automatically?表明问题是Excel不认为文件是UTF-8,除非它以字节顺序标记开头(因为它与以前的行为向后兼容)。在

尝试添加编码的BOM作为响应的前三个字节:

response = Response(u'\uFEFF'.encode('utf-8') + f.getvalue(), mimetype='text/csv')

或者,第一个答案表明,如果这不起作用,那么以UTF-16的形式发送内容通常会有效(但不是每个版本的Excel都是这样)。在

相关问题 更多 >