Decodificación de Url UTF-8 en Python


He pasado mucho tiempo en cuanto a que soy novato en Python.
Cómo podría decodificar tal 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

A éste en python 2.7: example.com?title==правовая+защита

url=urllib.unquote(url.encode("utf8")) está devolviendo algo muy feo.

Todavía no hay solución, cualquier ayuda es apreciada.

Author: jdphenix, 2013-05-15

2 answers

Los datos están codificados en UTF-8 bytes escapados con cita URL, por lo que desea decodificar :

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

Demo:

>>> 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=правовая+защита

El equivalente de Python 3 es urllib.parse.unquote(), que por defecto maneja la decodificación para usted:

from urllib.parse import unquote

url = unquote(url)
 277
Author: Martijn Pieters,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-03 17:28:39

Si está utilizando Python 3, puede utilizar 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)

Da:

'example.com?title=правовая+защита'
 113
Author: pavan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-29 12:38:39