Ошибка DjangoUnicodeDecodeError в форме

#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 ? См. раздел Общая обработка строк