Here is a minimal example of a flask view, which produces a 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)
Opening in Excel gives:
Header 1 Header 2 Header 3
1 2 3
a b c
£ € ¥
With Apple's Numbers App, the last line renders properly. How can I get Excel to render properly? Am I missing some sort of encoding setting?