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

这里是一个瓶颈视图的最小例子,它产生一个CSV(python 2.7)。

# -*- 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中打开可以:

 Header 1 Header 2 Header 3 1 2 3 abc £ € ¥ 

随着苹果的数字应用程序,最后一行呈现正确。 我怎样才能让Excel正确渲染? 我是否缺less某种编码设置?

是否可以强制Excel自动识别UTF-8 CSV文件? 暗示问题在于Excel不考虑将文件视为UTF-8,除非它以字节顺序标记开始(出于与以前的行为向后兼容的原因)。

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

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

或者,第一个答案表明,如果这不起作用,则以UTF- 16forms发布内容通常会起作用(但不是每个版本的Excel,即使那样)。