diff --git a/setup.py b/setup.py index 1feebf086..b50cf28cc 100644 --- a/setup.py +++ b/setup.py @@ -77,6 +77,7 @@ setup( 'sqlparse==0.2.3', 'thrift>=0.9.3', 'thrift-sasl>=0.2.1', + 'unidecode>=0.04.21', ], extras_require={ 'cors': ['Flask-Cors>=2.0.0'], diff --git a/superset/views/core.py b/superset/views/core.py index fc63391fa..d1219ea82 100755 --- a/superset/views/core.py +++ b/superset/views/core.py @@ -28,6 +28,7 @@ import pandas as pd import sqlalchemy as sqla from sqlalchemy import create_engine from sqlalchemy.engine.url import make_url +from unidecode import unidecode from werkzeug.routing import BaseConverter from werkzeug.utils import secure_filename @@ -2283,7 +2284,7 @@ class Superset(BaseSupersetView): csv = df.to_csv(index=False, **config.get('CSV_EXPORT')) response = Response(csv, mimetype='text/csv') response.headers['Content-Disposition'] = ( - 'attachment; filename={}.csv'.format(query.name)) + 'attachment; filename={}.csv'.format(unidecode(query.name))) logging.info('Ready to return response') return response