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);
प्रिंटों
http://example.com/query?q=random%20word%20%C2%A3500%20bank%20$
यहां क्या हो रहा है?
1. संरचनात्मक भागों में URL विभाजित करें। java.net.URL
इसके लिए उपयोग करें ।
2. प्रत्येक संरचनात्मक भाग को ठीक से एनकोड करें!
3. पुन्यकोड का उपयोग होस्ट नाम IDN.toASCII(putDomainNameHere)
को एनकोड करें !
4.java.net.URI.toASCIIString()
प्रतिशत-एनकोड का उपयोग करें , एनएफसी एनकोडेड यूनिकोड - (बेहतर होगा NFKC!)। अधिक जानकारी के लिए देखें: इस URL को ठीक से कैसे एनकोड करें
कुछ मामलों में यह जांचना उचित है कि क्या url पहले से एनकोडेड है । इसके अलावा '+' एन्कोडेड रिक्त स्थान को '% 20' एन्कोडेड रिक्त स्थान से बदलें।
यहां कुछ उदाहरण दिए गए हैं जो ठीक से काम भी करेंगे
{
"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$"
}
समाधान वेब प्लैटफॉर्म टेस्ट द्वारा प्रदान किए गए लगभग 100 टेस्टेस से गुजरता है ।