Кодировка URL в Python - PullRequest
       1

Кодировка URL в Python

25 голосов
/ 18 января 2012

Есть ли простой метод, который мне не хватает в urllib или другой библиотеке для этой задачи?Кодировка URL заменяет небезопасные символы ASCII на «%», за которым следуют две шестнадцатеричные цифры.

Вот пример ввода и ожидаемого результата:

Mozilla/5.0 (Linux; U; Android 4.0; xx-xx; Galaxy Nexus Build/IFL10C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30

Mozilla%2F5.0+%28Linux%3B+U%3B+Android+4.0%3B+xx-xx%3B+Galaxy+Nexus+Build%2FIFL10C%29+AppleWebKit%2F534.30+%28KHTML%2C+like+Gecko%29+Version%2F4.0+Mobile+Safari%2F534.30

Ответы [ 3 ]

49 голосов
/ 18 января 2012

Для Python 2.x используйте urllib.quote

Замените специальные символы в строке с помощью экранирования% xx.Буквы, цифры и символы «_.-» никогда не заключаются в кавычки.По умолчанию эта функция предназначена для цитирования раздела пути URL.Необязательный безопасный параметр указывает дополнительные символы, которые не должны заключаться в кавычки - его значение по умолчанию равно '/'.

пример:

In [1]: import urllib

In [2]: urllib.quote('%')
Out[2]: '%25'

РЕДАКТИРОВАТЬ :

В вашем случае, чтобы заменить пробел знаком плюс, вы можете использовать urllib.quote_plus

пример:

In [4]: urllib.quote_plus('a b')
Out[4]: 'a+b'

Для Python 3.x, используйте quote

>>> import urllib
>>> a = "asdas#@das"
>>> urllib.parse.quote(a)
'asdas%23%40das'

и для строки с пробелом quote_plus

>>> import urllib
>>> a = "as da& s#@das"
>>> urllib.parse.quote_plus(a)
'as+da%26+s%23%40das'
3 голосов
/ 06 декабря 2016

Имейте в виду, что оба значения urllib.quote и urllib.quote_plus выдают ошибку, если входные данные являются строкой Unicode:

s = u'\u2013'
urllib.quote(s)

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python27\lib\urllib.py", line 1303, in quote
    return ''.join(map(quoter, s))
KeyError: u'\u2013'

Как ответили здесь, на SO , нужно явно использовать 'UTF-8':

urllib.quote(s.encode('utf-8'))
1 голос
/ 25 ноября 2015

Кроме того, если у вас есть несколько значений, лучший способ сделать это будет urllib.urlencode.

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