На этом шаге мы рассмотрим функции, кодирующие и дектодирующие отдельные элементы строки запроса.
Выполнить кодирование и декодирование отдельных элементов строки запроса позволяют следующие функции из модуля urllib.parse:
quote (<Строка>[, safe='/'][, encoding=None][, errors=None])
В параметре safe можно указать символы, которые преобразовывать нельзя, - по умолчанию параметр имеет значение /. Параметр encoding позволяет указать кодировку данных, а параметр errors - уровень обработки ошибок. Пример:
>>> from urllib.parse import quote >>> quote("Строка", encoding="cp1251") # Кодировка Windows-1251 '%D1%F2%F0%EE%EA%E0' >>> quote("Строка", encoding="utf-8") # Кодировка UTF-8 '%D0%A1%D1%82%D1%80%D0%BE%D0%BA%D0%B0' >>> quote("/~nik/"), quote("/~nik/", safe="") ('/%7Enik/', '%2F%7Enik%2F') >>> quote("/~nik/", safe="/~") '/~nik/'
quote_plus (<Строка>[, safe=''][, encoding=None][, errors=None])
>>> from urllib.parse import quote, quote_plus >>> quote("Строка 2", encoding="cp1251") '%D1%F2%F0%EE%EA%E0%202' >>> quote_plus("Строка 2", encoding="cp1251") '%D1%F2%F0%EE%EA%E0+2' >>> quote_plus("/~nik/") '%2F%7Enik%2F' >>> quote_plus("/~nik/", safe="/~") '/~nik/'
quote_from_bytes (<Последовательность байтов>[, safe='/'])
>>> from urllib.parse import quote_from_bytes >>> quote_from_bytes(bytes("Строка 2", encoding="cp1251")) '%D1%F2%F0%EE%EA%E0%202'
unquote (<Строка> [, encoding = 'utf-8'][, errors = 'replace'])
>>> from urllib.parse import unquote >>> unquote ("%D1%F2%F0%EE%EA%E0", encoding="cp1251") 'Строка' >>> unquote ('%D1%F2%F0%EE%EA%E0+2', encoding="cp1251") 'Строка+2'
unquote_plus (<Строка> [, encoding = 'utf-8'][, errors = 'replace'])
>>> from urllib.parse import unquote_plus >>> unquote_plus("%D1%F2%F0%EE%EA%E0+2", encoding="cp1251") 'Строка 2' >>> unquote_plus("%D1%F2%F0%EE%EA%E0%202", encoding="cp1251") 'Строка 2'
unquote_to_bytes (<Строка или последовательность байтов>)
>>> from urllib.parse import unquote_to_bytes >>> unquote_to_bytes("%D1%F2%F0%EE%EA%E0%202") b'\xd1\xf2\xf0\xee\xea\xe0 2' >>> unquote_to_bytes(b"%D1%F2%F0%EE%EA%E0%202") b'\xd1\xf2\xf0\xee\xea\xe0 2' >>> unquote_to_bytes("%D0%A1%D1%82%D1%80%D0%BE%D0%BA%D0%B0") b'\xd0\xa1\xd1\x82\xd1\x80\xd0\xbe\xd0\xba\xd0\xb0' >>> str(_,"utf-8") 'Строка'
На следующем шаге мы рассмотрим преобразование относительного URL-адреса в абсолютный.