diff --git a/apps/common/parsers/csv.py b/apps/common/parsers/csv.py index 4cd626cef..d96e9d2ef 100644 --- a/apps/common/parsers/csv.py +++ b/apps/common/parsers/csv.py @@ -3,6 +3,7 @@ import json import chardet +import codecs import unicodecsv from rest_framework.parsers import BaseParser @@ -82,6 +83,7 @@ class JMSCSVParser(BaseParser): try: stream_data = stream.read() + stream_data = stream_data.strip(codecs.BOM_UTF8) detect_result = chardet.detect(stream_data) encoding = detect_result.get("encoding", "utf-8") binary = self._universal_newlines(stream_data) diff --git a/apps/common/renders/csv.py b/apps/common/renders/csv.py index 7e57a97e1..f917edd4c 100644 --- a/apps/common/renders/csv.py +++ b/apps/common/renders/csv.py @@ -2,6 +2,7 @@ # import unicodecsv +import codecs from datetime import datetime from six import BytesIO @@ -73,7 +74,8 @@ class JMSCSVRender(BaseRenderer): table = self._gen_table(data, header, labels) csv_buffer = BytesIO() - csv_writer = unicodecsv.writer(csv_buffer, encoding='utf-8-sig') + csv_buffer.write(codecs.BOM_UTF8) + csv_writer = unicodecsv.writer(csv_buffer, encoding='utf-8') for row in table: csv_writer.writerow(row)