Я пытаюсь сделать URL-запрос в кодировке url в python 2.7, где я хочу отправить список словарей python, которые будут на сервере декодированы как список объектов JSON. В сущности, я делаю:как urlencode значение, которое является словарем python с закодированными символами юникода
>>>urllib.urlencode({"param":"val", "items":[item1, item2] }, True)
где item1
может быть что-то вроде { "a": u"š".encode("utf8") }
(упрощено для примера)
Проблема возникает из-за символов Unicode.
Если item1
это само по себе закодированные, вы получите что-то значимое:
>>>urllib.urlencode(item1)
'a=%C5%A1'
однако, если я называю urllib.urlencode({"test": item1})
я получаю беспорядок:
'test=%7B%27a%27%3A+%27%5Cxc5%5Cxa1%27%7D'
В этом случае юникода характер больше не кодируется как %C5%A1
, а как более длинная последовательность, которая затем некорректно декодируется на стороне сервера.
Есть ли у кого-нибудь предложение правильно преобразовать значения словаря (т. Е. item1
), прежде чем звонить urlencode
, чтобы избежать этой проблемы?
1. Что такое результат декодирования на стороне сервера? 2. Что вы ожидаете в результате «urllib.urlencode ({« test »: item1})'? – User
Да, нет стандартного способа кодирования структурированного объекта, например, 'dict' в параметры запроса URL. В качестве крайней меры для того, чтобы ничего лучше делать, Python включил строковое представление объектного литерала, кодированную по URL-адресу версию '{'a': '\\ xc5 \\ xa1'}', но если ваш сервер -side приложение принимает структурированные объекты, вам нужно знать, какой пользовательский формат он хочет для них. – bobince