Я пытаюсь кодировать эту строку перед отправкой.
queryString = 'eventName=' + evt.fields["eventName"] + '&' + 'eventDescription=' + evt.fields["eventDescription"];
Вам нужно передать ваши параметры в urlencode()
виде отображения (dict) или последовательности из двух кортежей, например:
>>> import urllib
>>> f = { 'eventName' : 'myEvent', 'eventDescription' : 'cool event'}
>>> urllib.urlencode(f)
'eventName=myEvent&eventDescription=cool+event'
Python 3 или выше
Использование:
>>> urllib.parse.urlencode(f)
eventName=myEvent&eventDescription=cool+event
Обратите внимание, что это не делает кодирование URL в общепринятом смысле (посмотрите на вывод). Для этого используйте urllib.parse.quote_plus
.
Python 2
То, что вы ищете, это
urllib.quote_plus
:Python 3
В Python 3
urllib
пакет был разбит на более мелкие компоненты. Вы будете использоватьurllib.parse.quote_plus
(обратите внимание наparse
дочерний модуль)источник
import urllib.parse ... urllib.parse.quote_plus(query)
python3 -c "import urllib.parse, sys; print(urllib.parse.quote_plus(sys.argv[1])) "string to encode"
для одного вкладыша в командной строкеПопробуйте запросы вместо urllib, и вам не нужно беспокоиться об urlencode!
РЕДАКТИРОВАТЬ:
Если вам нужны упорядоченные пары имя-значение или несколько значений для имени, установите параметры следующим образом:
вместо использования словаря.
источник
контекст
проблема
Решение
Ловушки
пример
Ниже приводится полное решение, в том числе о том, как справиться с некоторыми подводными камнями.
источник
Python 3:
urllib.parse.quote_plus (строка, safe = '', кодировка = нет, ошибки = нет)
источник
urllib.parse.quote()
себя, так как он использует,%20
а не+
.Попробуй это:
urlencode
не будет работать, потому что работает только со словарями.quote_plus
не выдал правильный вывод.источник
my string
вmy%20string
. Ваше решение работает как очарование для этого!%20
вместо+
. СпасибоОбратите внимание, что urllib.urlencode не всегда делает свое дело. Проблема в том, что некоторые сервисы заботятся о порядке аргументов, который теряется при создании словаря. Для таких случаев лучше использовать urllib.quote_plus, как предложил Рики.
источник
>>> import urllib >>> urllib.urlencode([('name', 'brandon'), ('uid', 1000)]) 'name=brandon&uid=1000'
В Python 3 это работало со мной
источник
для будущих ссылок (например: для python3)
источник
'c:/2 < 3'
Windows есть'///C://2%20%3C%203'
. Я хочу что-то, что будет просто выводить'c:/2%20%3C%203'
.Для использования в сценариях / программах, которые должны поддерживать как Python 2, так и 3, шестой модуль предоставляет функции quote и urlencode:
источник
Если urllib.parse.urlencode () выдает ошибки, попробуйте модуль urllib3.
Синтаксис выглядит следующим образом :
источник
Еще одна вещь, которая, возможно, уже не упоминалась, - это
urllib.urlencode()
то, что пустые значения в словаре будут кодироваться как строкаNone
вместо того, чтобы этот параметр отсутствовал. Я не знаю, является ли это обычно желательным или нет, но не подходит для моего варианта использования, поэтому я должен использоватьquote_plus
.источник
Для Python 3 urllib3 работает правильно, вы можете использовать его в соответствии с его официальной документацией :
источник