2013-04-14 8 views
0

Я получил UnicodeDecodeError,UnicodeDecodeError

'utf8' codec can't decode byte 0xe5 in position 1923: invalid continuation byte 

У меня есть использовать датскую букву «А» в моем шаблоне. Как я могу решить проблему, тогда я могу использовать неанглийское письмо в своем проекте и базе данных Django?

+1

Вы уверены, что ваши данные на самом деле в UTF-8? – BrenBarn

+2

Похож на iso-8859-1 вместо utf-8. – robertklep

+0

Интересно, как выглядят базовые байты вашего шаблона (например, из 'hexdump'). Ваш символ 'å' является кодеком Unicode ** ** e5, но в UTF-8 фактические байты -' c3 a5'. Смотрите: http://hexutf8.com/?q=#å, если Python встречается с байтом 'e5', это будет ошибкой, так как это не допустимая последовательность байтов UTF-8: http://hexutf8.com/?q=e5 – jar

ответ

1

я могу получить подобную ошибку (упоминая же значение байта) делает это:

>>> 'å'.encode('latin-1') 
b'\xe5' 
>>> _.decode('utf-8') 
Traceback (most recent call last): 
    File "<pyshell#18>", line 1, in <module> 
    _.decode('utf-8') 
UnicodeDecodeError: 'utf8' codec can't decode byte 0xe5 in position 0: unexpected end of data 

Это означает, что ваши данные кодируются в Latin-1, а не UTF-8. В общем, есть два решения: если вы контролируете свои входные данные, перезагрузите его как UTF-8. В противном случае, когда вы читаете данные в Python, установите кодировку в латинский-1. Для шаблона django вы должны иметь возможность использовать первый - используемый вами редактор должен иметь опцию «кодирование» где-то, изменить его на utf-8, сохранить и все должно работать.

+0

Привет, lvc спасибо за ответ, теперь я изменил кодировку на utf-8, ошибка исчезла, но она не может отображать буквы «æ, ø, å» в borwser, вместо этого отображает пустые квадраты. – hln

+0

@hln проверить, что сгенерированный HTML не переопределяет параметр «charset» для клиента (HTML/HTTP использует термин «charset» вместо «encoding», но это то же самое). Это вызывает ту же проблему в другом месте. Обратите внимание, что кодировка, используемая для отправки данных клиенту, не должна совпадать с кодировкой, используемой для ввода кода сервера (включая файл шаблона) - все, что необходимо, - это то, что сервер говорит правду о том, какая кодировка использует. Если вы удалите любую настройку в вашем коде шаблона, django должен сделать правильную вещь. – lvc

+0

Если это не поможет, вам может быть повезло, задав новый вопрос (так как теперь вы получаете другую ошибку, чем тот, о котором идет речь). – lvc

0

это помогло мне https://stackoverflow.com/a/23278373/2571607

В принципе, открытый C: \ python27 \ Lib \ mimetypes.py

заменить

‘default_encoding = sys.getdefaultencoding()’ 

с

if sys.getdefaultencoding() != 'gbk': 
    reload(sys) 
    sys.setdefaultencoding('gbk') 
default_encoding = sys.getdefaultencoding()