De-codificar los parámetros de la URL

Estoy hablando con un servidor que solía enviarme cadenas HTTP como esta:

/path/to/my/handler/?action-query&id=112&type=vca&info=ch=0&type=event&ev16[sts=begin (...) 

Así que el parámetro GET de “información” incluía los caracteres “=” y “&”. Era bastante poco ortodoxo pero sin embargo escribimos un analizador para ello. Sin embargo, recientemente han decidido codificar parte de él, así que ahora la cadena se ve así.

 /path/to/my/handler/?action=query&id=112&type=vca&info=ch%3D0%26type%3Devent%26ev46[sts%3Dbegin (...) 

Esto rompe nuestro analizador, que espera una cadena como la primera.

¿Puedo de alguna manera “decodificar” la cadena, de modo que pueda usar el código antiguo (para que no se rompa cuando reescribimos el analizador)?

Según la respuesta a continuación, podemos usar urllib.unquote () para limpiar la cadena. Sin embargo, confiamos en request.GET, que se configura en base a la primera cadena. ¿Es posible reconstruir el objeto GET basado en la nueva cadena convertida, o forzarlo de alguna manera para que vuelva a evaluar?

Sospecho que lo que usted quiere es la función entre unquote del módulo urllib .

 >>> s = '/path/to/my/handler/?action=query&id=112&type=vca&info=ch%3D0%26type%3Devent%26ev46[sts%3Dbegin' >>> import urllib >>> urllib.unquote(s) '/path/to/my/handler/?action=query&id=112&type=vca&info=ch=0&type=event&ev46[sts=begin' 

Edición: No estoy muy familiarizado con Django, pero la sección de Objeto de solicitud y respuesta de sus documentos indica lo siguiente:

Las instancias de QueryDict son inmutables, a menos que cree una copia () de ellas. Eso significa que no puede cambiar los atributos de request.POST y request.GET directamente.

Según mi lectura limitada de esos documentos, es posible que pueda aplicar la función unquote() al atributo HttpRequest.body y generar un nuevo QueryDict partir de los resultados (y posiblemente usarlo para actualizar el actual si es necesario).