diff --git a/redash/handlers/query_results.py b/redash/handlers/query_results.py index bfc4371d08..92c63a193f 100644 --- a/redash/handlers/query_results.py +++ b/redash/handlers/query_results.py @@ -382,8 +382,10 @@ def make_json_response(query_result): @staticmethod def make_csv_response(query_result): - headers = {"Content-Type": "text/csv; charset=UTF-8"} - return make_response(serialize_query_result_to_dsv(query_result, ","), 200, headers) + headers = {"Content-Type": f"text/csv; charset={settings.CSV_WRITER_ENCODING.upper()}"} + return make_response( + serialize_query_result_to_dsv(query_result, ",").encode(settings.CSV_WRITER_ENCODING), 200, headers + ) @staticmethod def make_tsv_response(query_result): diff --git a/redash/settings/__init__.py b/redash/settings/__init__.py index 74842fd769..1d4213c147 100644 --- a/redash/settings/__init__.py +++ b/redash/settings/__init__.py @@ -455,3 +455,5 @@ def email_server_is_configured(): # Email blocked domains, use delimiter comma to separated multiple domains BLOCKED_DOMAINS = set_from_string(os.environ.get("REDASH_BLOCKED_DOMAINS", "qq.com")) + +CSV_WRITER_ENCODING = os.environ.get("REDASH_CSV_WRITER_ENCODING", "utf-8")