This is a example on how to return a utf-8 encoded csv form a django view.
import csv
import codecs
from django.contrib.auth import get_user_model
from django.views import View
from django.http import HttpResponse
User = get_user_model()
class ExportUsersView(View):
def get(self, request, *args, **kwargs):
response = HttpResponse(content_type="text/csv")
response["Content-Disposition"] = 'attachment; filename="user-export.csv"'
# Force response to be UTF-8 - This is where the magic happens
response.write(codecs.BOM_UTF8)
users = User.objects.all()
header = [
"username",
"first_name",
"last_name",
"email",
]
writer = csv.DictWriter(response, fieldnames=header)
writer.writeheader()
for user in users:
writer.writerow(
{
"username": user.username,
"first_name": user.first_name,
"last_name": user.last_name,
"email": user.email,
}
)
return response
thank you