Django InMemoryUploadedFile с универсальными линейными тормозами и utf8

В моем приложении django пользователи могут загружать свои CSV-файлы для импорта данных в django. Он отлично работает для файлов Unicode CLRF.

Но есть две проблемы:

  1. Когда файл не закодирован с помощью utf8, я продолжаю получать 'utf8' codec can't decode byte 0xdc in position 393: invalid continuation byte. Я попытался решить это, используя следующий код

    file = codecs.EncodedFile(request.FILES['import'],"utf-8")  
    dialect = csv.Sniffer().sniff(file.read(2048))
    file.open() # seek to 0
    
    reader = csv.reader(file,dialect=dialect) 
    
  2. Когда файл использует разрывы строки CR, они не распознаются или я получаю: new-line character seen in unquoted field - do you need to open the file in universal-newline mode?. Но InMemoryUploadedFile уже является открытым файловым объектом.

Моя проблема очень похожа на эту, но решение, упомянутое для пункта 1, у меня не сработало (как вы можете видеть, мой код очень похож), а на пункт 2 вообще нет ответа:

Обработка загруженного файла Django как UTF-8 с универсальными символами новой строки< /а>


person Daniel K.    schedule 04.02.2017    source источник