URL url= new URL("http://example.com/query?q=random word £500 bank $");
URI uri = new URI(url.getProtocol(), url.getUserInfo(), IDN.toASCII(url.getHost()), url.getPort(), url.getPath(), url.getQuery(), url.getRef());
String correctEncodedURL=uri.toASCIIString();
System.out.println(correctEncodedURL);
Wydruki
http://example.com/query?q=random%20word%20%C2%A3500%20bank%20$
Co tu się dzieje?
1. Podziel adres URL na części strukturalne. Użyj java.net.URL
do tego.
2. Zakoduj poprawnie każdą część konstrukcyjną!
3. Użyj IDN.toASCII(putDomainNameHere)
aby Punycode zakodować nazwę hosta!
4. Użyj java.net.URI.toASCIIString()
do kodowania procentowego, kodowania NFC unicode - (lepiej byłoby NFKC!). Aby uzyskać więcej informacji, zobacz: Jak poprawnie zakodować ten adres URL
W niektórych przypadkach wskazane jest sprawdzenie, czy adres URL jest już zakodowany . Zastąp także spacje zakodowane „+” spacjami zakodowanymi „% 20”.
Oto kilka przykładów, które również będą działać poprawnie
{
"in" : "http://نامهای.com/",
"out" : "http://xn--mgba3gch31f.com/"
},{
"in" : "http://www.example.com/‥/foo",
"out" : "http://www.example.com/%E2%80%A5/foo"
},{
"in" : "http://search.barnesandnoble.com/booksearch/first book.pdf",
"out" : "http://search.barnesandnoble.com/booksearch/first%20book.pdf"
}, {
"in" : "http://example.com/query?q=random word £500 bank $",
"out" : "http://example.com/query?q=random%20word%20%C2%A3500%20bank%20$"
}
Rozwiązanie przechodzi około 100 przypadków testowych dostarczonych przez Web Plattform Tests .