Unescape Python Strings de HTTP

Recibí una cadena de un encabezado HTTP, pero se ha escapado … ¿qué función puedo usar para quitarla?

myemail%40gmail.com -> myemail@gmail.com 

¿Sería urllib.unquote () el camino a seguir?

Estoy bastante seguro de que la falta de cita de urllib es la forma común de hacer esto.

 >>> import urllib >>> urllib.unquote("myemail%40gmail.com") 'myemail@gmail.com' 

También hay unquote_plus :

Al igual que unquote (), pero también reemplaza el signo más por espacios, según se requiera para no asignar valores de formulario HTML.

Sí, parece que urllib.unquote() realiza esa tarea. (Lo probé en tu ejemplo en el teclado ).

En Python 3, estas funciones son urllib.parse.unquote y urllib.parse.unquote_plus .

Este último se usa, por ejemplo, para cadenas de consulta en las URL de HTTP, donde los caracteres de espacio ( ) se codifican tradicionalmente como caracteres más ( + ), y el + está codificado en %2B a %2B .

Además de estos, hay unquote_to_bytes que convierte la cadena codificada dada en bytes , que se puede usar cuando la encoding no se conoce o los datos codificados son datos binarios. Sin embargo, no hay unquote_plus_to_bytes , si lo necesita, puede hacer:

 def unquote_plus_to_bytes(s): if isinstance(s, bytes): s = s.replace(b'+', b' ') else: s = s.replace('+', ' ') return unquote_to_bytes(s) 

Más información sobre si usar unquote_plus o unquote_plus está disponible en la URL que codifica el carácter de espacio: + o% 20 .