2011-10-02 15 views

Respuesta

3

He probado algunas bibliotecas, incluida la ahora heredada URIUtil de HTTPClient sin sentir que encontré ninguna solución viable. Por lo general, ya he tenido bastante éxito con este tipo de construcción java.net.URI sin embargo:

/** 
* Tries to construct an url by breaking it up into its smallest elements 
* and encode each component individually using the full URI constructor: 
* 
* foo://example.com:8042/over/there?name=ferret#nose 
* \_/ \______________/\_________/ \_________/ \__/ 
*  |   |   |   |  | 
* scheme  authority  path  query fragment 
*/ 
public URI parseUrl(String s) throws Exception { 
    URL u = new URL(s); 
    return new URI(
     u.getProtocol(), 
     u.getAuthority(), 
     u.getPath(), 
     u.getQuery(), 
     u.getRef()); 
} 

que se puede utilizar junto con la siguiente rutina. Descodifica repetidamente un URL hasta que la cadena descodificada no cambie, lo que puede ser útil contra, por ejemplo, doble codificación. Tenga en cuenta, que sea sencillo, esta muestra no dispone de ninguna prueba de fallos, etc.

public String urlDecode(String url, String encoding) throws UnsupportedEncodingException, IllegalArgumentException { 
    String result = URLDecoder.decode(url, encoding); 
    return result.equals(url) ? result : urlDecode(result, encoding); 
} 
1

Yo aconsejaría contra el uso de URIs java.net.URLEncoder ciento de codificación. A pesar del nombre, no es ideal para la codificación de direcciones URL, ya que no siguen el estándar rfc3986 y en su lugar codifica al formato application/x-www-form-urlencoded MIME (read more here)

Para codificar los URI en Scala que recomendaría la clase Uri de aspersión http. scala-uri es una alternativa (descargo de responsabilidad: soy el autor).

Cuestiones relacionadas