2011-10-02 16 views

risposta

3

Ho testato alcune librerie, inclusa l'ora legacy URIUtil di HTTPClient senza aver trovato alcuna soluzione valida. In genere, ne ho avuto abbastanza successo con questo tipo di costrutto java.net.URI però:

/** 
* 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()); 
} 

che può essere usato combinazione con la seguente routine. Decodifica ripetutamente uno URL fino a quando la stringa decodificata non cambia, il che può essere utile ad esempio, con la doppia codifica . Si noti, per mantenerlo semplice, questo campione non dispone di alcuna failsafe ecc

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

Vorrei consigliare di non usare java.net.URLEncoder per URI codifica per cento. Nonostante il nome, non è grande per la codifica degli URL in quanto non seguono lo standard rfc3986 e codifica nel formato application/x-www-form-urlencoded MIME (read more here)

Per la codifica URI a Scala mi sento di raccomandare la classe Uri da spray-http invece. scala-uri è un'alternativa (disclaimer: io sono l'autore).