2009-04-23 17 views

Respuesta

34

Estoy bastante seguro de que el unquote de urllib es la forma más común de hacerlo.

>>> import urllib 
>>> urllib.unquote("myemail%40gmail.com") 
'[email protected]' 

También hay unquote_plus:

Como fin de la cita(), pero también reemplaza por signos más espacios, como se requiere para unquoting valores del formulario HTML.

+1

K, solo quería asegurarme ... Odio el uso de una función que parece hacer el trabajo, pero termina trabajando solo con unos pocos ejemplos que hice y rompiendo con vars del mundo real. heh. Entonces es imposible rastrear el problema ..: P – Ian

1

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

El último se utiliza por ejemplo para las cadenas de consulta en las direcciones URL HTTP, donde los caracteres de espacio () se codifican tradicionalmente como más el carácter (+), y la + es ciento codificada a %2B.

Además de estos existe el unquote_to_bytes que convierte la cadena codificada dada a bytes, que se puede utilizar cuando la codificación no se conoce o los datos codificados son datos binarios. Sin embargo no hay unquote_plus_to_bytes, si lo necesita, puede hacerlo:

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 o unquoteunquote_plus está disponible en URL encoding the space character: + or %20.