Url декодировать UTF-8 в Python

Я провел много времени, насколько я новичок в Python.

Как я мог когда-либо расшифровать такой URL:

example.com?title=%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%D0%B2%D0%B0%D1%8F+%D0%B7%D0%B0%D1%89%D0%B8%D1%82%D0%B0

к этому в Python 2.7:example.com?title==правовая+защита

url=urllib.unquote(url.encode("utf8")) возвращает что-то очень некрасивое.

Все еще нет решения, любая помощь приветствуется.

 tripleee29 янв. 2018 г., 13:45
В общем случае хвост URL - это просто cookie. Вы можете'не знает, какой локальный набор символов использует сервер или даже URL-адрес кодирует строку или что-то совершенно другое. (Конечно, много URLделать кодировать удобочитаемую строку; и часто вы можете легко угадать кодировку. Но это'Это невозможно в общем случае или полностью автоматически.)

Ответы на вопрос(2)

вы можете использоватьurllib.parse

url = """example.com?title=%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%D0%B2%D0%B0%D1%8F+%D0%B7%D0%B0%D1%89%D0%B8%D1%82%D0%B0"""

import urllib.parse
urllib.parse.unquote(url)

дает:

'example.com?title=правовая+защита'
Решение Вопроса

экранированные с помощью цитирования URL, поэтому вы хотитерасшифровывает:

url = urllib.unquote(url).decode('utf8') 

Демо-версия:

>>> import urllib 
>>> url='example.com?title=%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%D0%B2%D0%B0%D1%8F+%D0%B7%D0%B0%D1%89%D0%B8%D1%82%D0%B0'
>>> urllib.unquote(url).decode('utf8') 
u'example.com?title=\u043f\u0440\u0430\u0432\u043e\u0432\u0430\u044f+\u0437\u0430\u0449\u0438\u0442\u0430'
>>> print urllib.unquote(url).decode('utf8')
example.com?title=правовая+защита

Эквивалент Python 3urllib.parse.unquote(), который по умолчанию обрабатывает декодирование для вас:

from urllib.parse import unquote

url = unquote(url)
 Martijn Pieters03 окт. 2014 г., 01:14
@Rawrgulmuffins+ это пространство вx-www-form-urlencoded данные; вы'буду использоватьurllib.parse.parse_qs() разобрать или использоватьurllib.parse.unquote_plus(), Но они должны появляться только в строке запроса, а не в остальной части URL.
 AlexLordThorsen03 окт. 2014 г., 00:29
Так почему символ + остается в строке? Я думал, что% 2B был символ + и литералы + были удалены во время декодирования?

Ваш ответ на вопрос