From 1e4f34045e3fa7733be63c70e3f454e67b4b6a74 Mon Sep 17 00:00:00 2001
From: Neda Moeini <neda.moeini@geant.org>
Date: Fri, 28 Mar 2025 10:50:17 +0100
Subject: [PATCH] Update encoding on reading CSV files to cover Windows user as
 well

---
 sage_validation/file_validator/forms.py | 2 +-
 sage_validation/file_validator/views.py | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/sage_validation/file_validator/forms.py b/sage_validation/file_validator/forms.py
index 4a6895d..990b83c 100644
--- a/sage_validation/file_validator/forms.py
+++ b/sage_validation/file_validator/forms.py
@@ -76,7 +76,7 @@ class CSVUploadForm(forms.Form):
         self._validate_file_type(file)
 
         # Step 2: Parse file and validate headers
-        raw_data = file.read().decode("utf-8")
+        raw_data = file.read().decode("utf-8-sig")
         normalized_data = raw_data.replace("\r\n", "\n").replace("\r", "\n")
         csv_file = normalized_data.splitlines()
         reader = csv.DictReader(csv_file, delimiter=",")
diff --git a/sage_validation/file_validator/views.py b/sage_validation/file_validator/views.py
index aeaa50b..b58807d 100644
--- a/sage_validation/file_validator/views.py
+++ b/sage_validation/file_validator/views.py
@@ -53,7 +53,7 @@ class CSVUploadAPIView(APIView):
 
         csv_file = form.cleaned_data["file"]
         csv_file.seek(0)
-        decoded_file = csv_file.read().decode("utf-8").strip()
+        decoded_file = csv_file.read().decode("utf-8-sig").strip()
 
         if not decoded_file:
             return Response({"status": "error", "message": "Uploaded file is empty."},
-- 
GitLab