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)
에 퓨니 코드 (Punycode) 호스트 이름을 인코딩!
4.java.net.URI.toASCIIString()
NFC 인코딩 유니 코드를 퍼센트 인코딩하는 데 사용 합니다 (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$"
}
이 솔루션은 Web Plattform Tests에서 제공하는 약 100 개의 테스트 케이스를 통과 합니다.