Django: отслеживание ошибки DjangoUnicodeDecodeError - PullRequest
1 голос
/ 24 ноября 2010

При попытке визуализации шаблона я получаю следующую ошибку:

DjangoUnicodeDecodeError: 'utf8' codec can't decode bytes in position 26-27: invalid data. You passed in '\xce\x88\xce\xbe\xce\xbf\xce\xb4\xce\xb1 \xcf\x83\xcf\x84\xce\xb7\xce\xbd \xce\xb5\xcf\x81\xce\xb3\xce...' (<type 'str'>)

Шаблон довольно большой и сложный, поэтому я надеюсь получить несколько советов о том, как именно это отследить

Несколько фактов, которые могут быть полезны:

  • Шаблон, как правило, удобен для юникода;мы выводим через него изрядное количество данных Unicode
  • Таблица mysql, из которой поступают данные, имеет кодировку utf8
  • Это странное : ошибка непоказывать на моем промежуточном сервере при использовании той же базы кода и тех же производственных данных.Настройка очень похожа на рабочий сервер: Python 2.5.1, Django-1.1.1, mysql 5.0.38, Ubuntu.

Я не уверен, где именно искать плохо закодированныйданные, любые подсказки или указатели будут оценены.

Ответы [ 3 ]

4 голосов
/ 24 ноября 2010

Где-то вы усекаете строку, но вы делаете это на str вместо unicode, поэтому вы в итоге разбиваете последовательность символов UTF-8 пополам.Всегда выполняйте текстовые операции на unicode, никогда str.

1 голос
/ 24 ноября 2010

То, что сообщается об исключении, составляет 26 байтов действительного UTF-8, за которым следует '\xce...'

Мне очень кажется, что какая-то часть программного обеспечения, либо в вашем коде, либо в коде Django, делает что-то вроде этого:

def too_big_display(strg, maxlen):
    return strg[:maxlen-3] + "..."

и, в вашем случае, вызывая его с too_big_display(your_Greek_text_encoded_in_utf8,30)

и, таким образом, вы видите вторичную ошибку ... \xce., недопустимый UTF-8.

Я предлагаю вам очень внимательно изучить traceback (, который вы должны были показать нам, и все еще можете, отредактировав свой вопрос ), чтобы увидеть, есть ли какие-либо доказательства основная ошибка. Если нет, внимательно изучите ваш код для такого усечения.

0 голосов
/ 28 февраля 2013

В случае, если у кого-то есть похожая ситуация, как у меня: я недавно изменил таблицу MySQL, чтобы использовать сортировку utf8_bin, и столкнулся с той же проблемой.Я узнал, что в постановке у меня MySQL-python 1.2.3.Обновление до 1.2.4 решило проблему для меня.Я использую python2.7, Django1.4.2.

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