Я протестировал несколько библиотек, включая устаревшую URIUtil HTTPClient, не чувствуя, что нашел какое-либо жизнеспособное решение.Как правило, я имел достаточно успеха с этим типом java.net.URI конструкции, хотя:
/**
* 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());
}
, которая может использоваться в комбинации со следующей подпрограммойОн постоянно декодирует URL
до тех пор, пока декодированная строка не изменится, что может быть полезно, например, против двойного кодирования .Обратите внимание, что для простоты в этом примере нет отказоустойчивости и т. Д.
public String urlDecode(String url, String encoding) throws UnsupportedEncodingException, IllegalArgumentException {
String result = URLDecoder.decode(url, encoding);
return result.equals(url) ? result : urlDecode(result, encoding);
}