From 1cdcc66dbae95f8639f6d56a4ee5a42216c6f298 Mon Sep 17 00:00:00 2001 From: ibuler Date: Fri, 31 May 2019 17:04:00 +0800 Subject: [PATCH 1/2] =?UTF-8?q?[Update]=20=E4=BF=AE=E6=94=B9excel=E6=89=93?= =?UTF-8?q?=E5=BC=80=E4=B9=B1=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/common/renders/csv.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/apps/common/renders/csv.py b/apps/common/renders/csv.py index 3352c73a0..7e57a97e1 100644 --- a/apps/common/renders/csv.py +++ b/apps/common/renders/csv.py @@ -53,7 +53,6 @@ class JMSCSVRender(BaseRenderer): def render(self, data, media_type=None, renderer_context=None): renderer_context = renderer_context or {} - encoding = renderer_context.get('encoding', 'utf-8') request = renderer_context['request'] template = request.query_params.get('template', 'export') view = renderer_context['view'] @@ -74,7 +73,7 @@ class JMSCSVRender(BaseRenderer): table = self._gen_table(data, header, labels) csv_buffer = BytesIO() - csv_writer = unicodecsv.writer(csv_buffer, encoding=encoding) + csv_writer = unicodecsv.writer(csv_buffer, encoding='utf-8-sig') for row in table: csv_writer.writerow(row) From 49632241b6bbf87e0a5c27137b8d2362b7acffff Mon Sep 17 00:00:00 2001 From: ibuler Date: Fri, 31 May 2019 17:40:57 +0800 Subject: [PATCH 2/2] =?UTF-8?q?[Update]=20=E5=AF=BC=E5=85=A5=E8=A7=A3?= =?UTF-8?q?=E6=9E=90csv=20coding?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/common/parsers/csv.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/apps/common/parsers/csv.py b/apps/common/parsers/csv.py index b536a0f73..4cd626cef 100644 --- a/apps/common/parsers/csv.py +++ b/apps/common/parsers/csv.py @@ -2,6 +2,7 @@ # import json +import chardet import unicodecsv from rest_framework.parsers import BaseParser @@ -73,7 +74,6 @@ class JMSCSVParser(BaseParser): def parse(self, stream, media_type=None, parser_context=None): parser_context = parser_context or {} - encoding = parser_context.get('encoding', 'utf-8') try: serializer = parser_context["view"].get_serializer() except Exception as e: @@ -82,6 +82,8 @@ class JMSCSVParser(BaseParser): try: stream_data = stream.read() + detect_result = chardet.detect(stream_data) + encoding = detect_result.get("encoding", "utf-8") binary = self._universal_newlines(stream_data) rows = self._gen_rows(binary, charset=encoding) @@ -97,5 +99,5 @@ class JMSCSVParser(BaseParser): data.append(row_data) return data except Exception as e: - logger.debug(e, exc_info=True) + logger.error(e, exc_info=True) raise ParseError('CSV parse error!')