Уведомления

Группа в Telegram: @pythonsu

#1 Июль 1, 2012 23:59:53

UsCr
От:
Зарегистрирован: 2009-11-04
Сообщения: 216
Репутация: +  0  -
Профиль   Отправить e-mail  

Кодировка.

Здравствуйте. Получаю POST'ом из формы строку. Далее с этой строкой совершаются некие действия. Если ввожу строку на русском - то и дело получаю UnicodeEncodeError. Как бороться?

Немножко нагугленного:

Form submission
HTML form submission is a tricky area. There's no guarantee that the submission will include encoding information, which means the framework might have to guess at the encoding of submitted data.

Django adopts a “lazy” approach to decoding form data. The data in an HttpRequest object is only decoded when you access it. In fact, most of the data is not decoded at all. Only the HttpRequest.GET and HttpRequest.POST data structures have any decoding applied to them. Those two fields will return their members as Unicode data. All other attributes and methods of HttpRequest return data exactly as it was submitted by the client.

By default, the DEFAULT_CHARSET setting is used as the assumed encoding for form data. If you need to change this for a particular form, you can set the encoding attribute on an HttpRequest instance. For example:

def some_view(request):
# We know that the data must be encoded as KOI8-R (for some reason).
request.encoding = ‘koi8-r’

You can even change the encoding after having accessed request.GET or request.POST, and all subsequent accesses will use the new encoding.

Most developers won't need to worry about changing form encoding, but this is a useful feature for applications that talk to legacy systems whose encoding you cannot control.

Django does not decode the data of file uploads, because that data is normally treated as collections of bytes, rather than strings. Any automatic decoding there would alter the meaning of the stream of bytes.

Я так понимаю, тут написано: “не парьтесь, чуваки. Джанга сама всё сделает”. Видимо, это только для символов латиницы действительно?



Офлайн

#2 Июль 2, 2012 05:46:05

magnet85
От:
Зарегистрирован: 2009-04-13
Сообщения: 91
Репутация: +  2  -
Профиль   Отправить e-mail  

Кодировка.

В начале файла в котором совершаются действия есть строка #-*- coding: utf-8 -*- ?



Офлайн

#3 Июль 2, 2012 07:15:29

UsCr
От:
Зарегистрирован: 2009-11-04
Сообщения: 216
Репутация: +  0  -
Профиль   Отправить e-mail  

Кодировка.

magnet85
В начале файла в котором совершаются действия есть строка #-*- coding: utf-8 -*- ?

Да. Прошу прощения. Не выспался. А ведь был указан номер строки, на которой всё падает. А падало всё на подсчёте контрольной суммы: hashlib.md5(string).hexdigest()

Теперь при записи в базу ругается на Incorrect string value: ‘\xD1\x82\xD0\xB5\xD1\x81…’ for column ‘text’ at row 1. Это ужк проблемы настроек самого мускуля, да? Джанга уже не при чём?



Офлайн

#4 Июль 4, 2012 13:14:05

UsCr
От:
Зарегистрирован: 2009-11-04
Сообщения: 216
Репутация: +  0  -
Профиль   Отправить e-mail  

Кодировка.

UsCr
magnet85
В начале файла в котором совершаются действия есть строка #-*- coding: utf-8 -*- ?

Да. Прошу прощения. Не выспался. А ведь был указан номер строки, на которой всё падает. А падало всё на подсчёте контрольной суммы: hashlib.md5(string).hexdigest()

Теперь при записи в базу ругается на Incorrect string value: ‘\xD1\x82\xD0\xB5\xD1\x81…’ for column ‘text’ at row 1. Это ужк проблемы настроек самого мускуля, да? Джанга уже не при чём?

Ап

Базу, на всякий случай, сконвертировал в UTF-8 - проблема осталась.
Пробовал писать строку с .encode('utf-8') - проблема осталась.



Офлайн

#5 Июль 4, 2012 13:41:58

UsCr
От:
Зарегистрирован: 2009-11-04
Сообщения: 216
Репутация: +  0  -
Профиль   Отправить e-mail  

Кодировка.

Извиняюсь. Базу сконвертировал, а в настройках джанги стояла старая, в latin1. Конвертирование базы всё таки помогло.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version