#python #django #csv #encoding #utf-8
Вопрос:
В нашем приложении есть организации и администраторы организаций. У нас есть инструмент, позволяющий им импортировать CSV-файл со своими пользователями в свою организацию.
CSV-файл анализируется с помощью csv.reader
:
[line for line in csv.reader(file_data, delimiter=',') if line]
И регулярно dict
с каждой записью пользователя создается запись с ожидаемыми полями.
Затем каждый пользователь проходит проверку:
for user_dict in users_dict:
form = CSVUserForm(data=user_dict)
if form.is_valid():
# do stuff
Ну, это та самая form.is_valid()
линия, где DjangoUnicodeDecodeError
бросают. Конкретное сообщение об ошибке:
DjangoUnicodeDecodeError: 'utf8' codec can't decode byte 0xcd in position 4: invalid continuation byte. You passed in 'GARCxcdA' (<type 'str'>)
Теперь кажется 'GARCxcdA'
, что строка (типа str
) в какой-то момент не преобразуется должным образом. У меня нет доступа к файлу CSV, который они загрузили, поэтому я не уверен, был ли xcd
символ буквально в файле CSV, является ли это результатом вставки или это просто то, как Python интерпретирует этот символ.
В любом случае, похоже, что этот инструмент импорта CSV способен импортировать специальные символы без проблем, но время от времени мы получаем эту ошибку. Что происходит и как я могу это решить?
Я использую Python 2.7.14 и Django 1.8.17 (не спрашивайте, почему).
Комментарии:
1. Вы пробовали импортировать
from __future__ import unicode_literals
? См. раздел Общая обработка строк