Как бороться с кодировкой параметра запроса? - PullRequest
3 голосов
/ 06 октября 2009

Я предполагал, что любые данные, отправляемые в мои строки параметров, будут utf-8, так как именно это использует весь мой сайт. Черт возьми, я был неправ.

Для в этом примере имеет символ ä в utf-8 в документе (из строки запроса), но продолжает отправлять B\xe4ule (то есть ISO-8859-1 или windows 1252) при нажатии на кнопку отправить. Он также запускает ajax-запрос , который также не в состоянии попытаться декодировать символ не-utf8.

В django, мой запрос. Почта действительно облажалась:

>>> print request.POST
<QueryDict: {u'alias': [u'eu.wowarmory.com/character-sheet.xml?r=Der Rat von Dalaran&cn=B\ufffde']}>

Как я могу просто убрать все эти головные боли и работать в utf8?

Ответы [ 5 ]

3 голосов
/ 08 октября 2009

Начиная с Django 1.0 все значения, которые вы получаете при отправке формы, являются объектами Unicode, а не байтовыми строками, как в Django 0.96 и более ранних версиях. Чтобы получить utf-8 из ваших значений, закодируйте их с помощью кодека utf-8:

request.POST['somefield'].encode('utf-8')

Для правильного декодирования параметров запроса их необходимо сначала правильно кодировать:

In [3]: urllib.quote('ä')
Out[3]: '%C3%A4'

Мне кажется, ваша проблема в неправильном кодировании параметров запроса.

1 голос
/ 20 октября 2009

Вы также должны добавить accept-charset="UTF-8" к тегу <form/>.

0 голосов
/ 04 ноября 2009

Получение строки utf-8 из отправленной формы должно быть просто вопросом кодирования объект Unicode:

next = request.POST ['next']. Encode ('utf-8')

Для запроса AJAX вы можете подтвердить, что этот запрос также отправляется как utf-8 и объявляется как utf-8 в заголовках?

0 голосов
/ 06 октября 2009

Согласно Получить поля формы, отличные от UTF-8, как UTF-8 в PHP? , вам необходимо убедиться, что сама страница обслуживается с использованием кодировки UTF8.

0 голосов
/ 06 октября 2009

Хотя это AFAIK нигде не указано, все браузеры используют кодировку символов страницы HTML, в которую встроена форма, в качестве кодировки для отправки формы обратно на сервер. Поэтому, если вы хотите, чтобы параметры URL кодировались в UTF-8, вы должны убедиться, что HTML-страница, в которую встроена форма, также кодируется в UTF-8.

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