Django rest framework csv renderer неправильно отображает знак € (EUR) - PullRequest
0 голосов
/ 06 октября 2019

Я использую django-rest-framework-csv (https://github.com/mjumbewu/django-rest-framework-csv/) для загрузки csv из api.

Проблема в том, что когда я пишу строку со знаком , я получаю вот так вExcel: enter image description here

Код:


renderer = CSVRenderer()

renderer.header = ['last_name', 'first_name', 'nutrition_text', 'monthly_total_price']
renderer.labels = {
    'last_name': 'Nachname', 
    'first_name': 'Vorname', 
    'nutrition_text': 'Ernährung', 
    'monthly_total_price': 'Monthly total price'
}
data = [
    {'last_name': 'asdasd', 'first_name': 'asdas', 'nutrition_text': '', 'monthly_total_price': ''}, 
    {'last_name': 'Delic', 'first_name': 'Mirza', 'nutrition_text': '', 'monthly_total_price': '-18.00€'}
]

response = HttpResponse(renderer.render(data), content_type='text/csv')
response['Content-Disposition'] = 'attachment; filename="Data.csv"'

return response

Снимок экрана Excel:

enter image description here

Кроме того, Ernährung не очень хорош в Excel.

Какое-нибудь решение для этого?

Ответы [ 2 ]

0 голосов
/ 06 октября 2019

Похоже, что символы кодируются (CSVRenderer) как UTF-8, но декодируются (Excel) как обычный ASCII. Попробуйте этот метод, чтобы открыть CSV-файлы в кодировке UTF-8 в Excel :

  1. . Перейдите в меню ленты данных> Из текста
  2. В мастере импорта. укажите тип данных файла: с разделителями (запятыми) и происхождение файла: Unicode (UTF-8)
0 голосов
/ 06 октября 2019

Если вы посмотрите на CSVRenderer , кодировка, используемая в буфере csv, по умолчанию используется в django.conf. В django.conf: DEFAULT_CHARSET мы можем видеть, что эта кодировка - UTF-8.

Если строка, которую вы сбрасываете в csv, не кодируется в utf-8, у вас может быть такой вывод. Поэтому, возможно, вам следует закодировать свои данные, прежде чем передать их в renderer.redner(data), используя str.encode вначале.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...