Неверное строковое значение: ‘xE0 xB9x82 xE0 xB8 xA3 …’ для столбца ‘текст’ в строке 1

#mysql #django

#mysql #django

Вопрос:

В моем приложении Django я читаю текстовый файл и загружаю его в виде длинного текстового поля в базу данных mysql. Моя база данных поддерживает кодировку UTF-8, но я получаю следующую ошибку:

Тип исключения: предупреждение при / загрузке Значение исключения: Неверное строковое значение: ‘xE0 xB9 x82 xE0 xB8 xA3 …’ для столбца ‘текст’ в строке 1

Код, который преобразует его в юникод в python, находится здесь:

 fileobj = self.request.FILES.get('filepath', None)
filetext = unicode(fileobj.read(), 'utf-8') 
uploadedText = models.UploadedText()
uploadedText.text = filetext uploadedText.save()
  

Ответ №1:

Убедитесь, что вы установили параметры сортировки базы данных в utf8_general_ci и что ваша модель UploadedText выглядит примерно так:

 class UploadedText(models.Model):
  text = models.CharField(max_length=500)
  

Затем попробуйте этот код:

 fileobj = self.request.FILES.get('filepath', None)
filetext = fileobj.read() 
uploadedText = models.UploadedText()
uploadedText.text = filetext 
uploadedText.save()
  

Вам не нужно явно преобразовывать содержимое файла в юникод, если оно уже в юникоде. Также протестируйте этот код для файла только с ascii-содержимым, чтобы увидеть, получите ли вы требуемый ответ.

Надеюсь, это поможет. Если вы обнаружите какие-либо дополнительные ошибки, пожалуйста, ОПУБЛИКУЙТЕ их. Приветствия