Как процент-кодировать параметры URL в Python?
Если я это сделаю
url = "http://example.com?p=" + urllib.quote(query)
- он не кодирует
/
to%2F
(прерывает нормализацию OAuth) - он не обрабатывает Unicode (он выдает исключение)
есть ли лучшая библиотека?
4 ответа:
С docs:
urllib.quote(string[, safe])
заменить специальные символы в строке использование % xx escape. Буквы, цифры, и символы '_.- никогда не цитируемый. По умолчанию эта функция предназначен для цитирования раздела пути URL-адреса.Дополнительный безопасный параметр указывает дополнительные символы, которые не следует цитировать -его значение по умолчанию значение '/'
что означает " для безопасной может решить вашу первый вопрос:
>>> urllib.quote('/test') '/test' >>> urllib.quote('/test', safe='') '%2Ftest'
о второй проблеме, есть сообщение об ошибке об этом здесь. По-видимому, это было исправлено в python 3. Вы можете обойти это путем кодирования как utf8 вроде этого:
>>> query = urllib.quote(u"Müller".encode('utf8')) >>> print urllib.unquote(query).decode('utf8') Müller
кстати взгляните на urlencode
отметим, что
urllib.quote
переехал вurllib.parse.quote
в Python3
В Python 3,
urllib.quote
был перенесен наurllib.parse.quote
и он обрабатывает unicode по умолчанию.>>> from urllib.parse import quote >>> quote('/test') '/test' >>> quote('/test', safe='') '%2Ftest' >>> quote('/El Niño/') '/El%20Ni%C3%B1o/'