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?
 
     
     
     
     
    