{"id":97,"date":"2018-11-09T07:50:56","date_gmt":"2018-11-09T07:50:56","guid":{"rendered":"https:\/\/jan.schnasse.org\/blog\/?p=97"},"modified":"2018-11-09T07:50:56","modified_gmt":"2018-11-09T07:50:56","slug":"url-encoding-in-java","status":"publish","type":"post","link":"https:\/\/jan.schnasse.org\/blog\/2018\/11\/09\/url-encoding-in-java\/","title":{"rendered":"URL encoding in Java."},"content":{"rendered":"<p><a href=\"https:\/\/stackoverflow.com\/a\/49797412\/1485527\">Here is<\/a>, how I encode URLs in Java.<\/p>\n<ol>\n<li>Split URL into structural parts. Use java.net.URL for it.<\/li>\n<li>Encode each part properly<\/li>\n<li>Use <code>IDN.toASCII(putDomainNameHere)<\/code> to <a href=\"https:\/\/en.wikipedia.org\/wiki\/Punycode\" rel=\"nofollow noreferrer\">Punycode<\/a> encode the host name!<\/li>\n<li>Use <code>java.net.URI.toASCIIString()<\/code> to percent-encode, NFC encoded unicode &#8211; (better would be NFKC!). For more info see: <a href=\"https:\/\/stackoverflow.com\/questions\/49768599\/how-to-encode-properly-this-url\/49778055#49778055\">How to encode properly this URL<\/a>\n<pre class=\"lang-java prettyprint prettyprinted\"><code><span class=\"pln\">URL url<\/span><span class=\"pun\">=<\/span> <span class=\"kwd\">new<\/span><span class=\"pln\"> URL<\/span><span class=\"pun\">(<\/span><span class=\"str\">\"<\/span><span class=\"pln\">http<\/span><span class=\"pun\">:<\/span><span class=\"com\">\/\/search.barnesandnoble.com\/booksearch\/first book.pdf);<\/span><span class=\"pln\">\nURI uri <\/span><span class=\"pun\">=<\/span> <span class=\"kwd\">new<\/span><span class=\"pln\"> URI<\/span><span class=\"pun\">(<\/span><span class=\"pln\">url<\/span><span class=\"pun\">.<\/span><span class=\"pln\">getProtocol<\/span><span class=\"pun\">(),<\/span><span class=\"pln\"> url<\/span><span class=\"pun\">.<\/span><span class=\"pln\">getUserInfo<\/span><span class=\"pun\">(),<\/span><span class=\"pln\"> IDN<\/span><span class=\"pun\">.<\/span><span class=\"pln\">toASCII<\/span><span class=\"pun\">(<\/span><span class=\"pln\">url<\/span><span class=\"pun\">.<\/span><span class=\"pln\">getHost<\/span><span class=\"pun\">()),<\/span><span class=\"pln\"> url<\/span><span class=\"pun\">.<\/span><span class=\"pln\">getPort<\/span><span class=\"pun\">(),<\/span><span class=\"pln\"> url<\/span><span class=\"pun\">.<\/span><span class=\"pln\">getPath<\/span><span class=\"pun\">(),<\/span><span class=\"pln\"> url<\/span><span class=\"pun\">.<\/span><span class=\"pln\">getQuery<\/span><span class=\"pun\">(),<\/span><span class=\"pln\"> url<\/span><span class=\"pun\">.<\/span><span class=\"pln\">getRef<\/span><span class=\"pun\">());<\/span>\n<span class=\"typ\">String<\/span><span class=\"pln\"> correctEncodedURL<\/span><span class=\"pun\">=<\/span><span class=\"pln\">uri<\/span><span class=\"pun\">.<\/span><span class=\"pln\">toASCIIString<\/span><span class=\"pun\">();<\/span> \n<span class=\"typ\">System<\/span><span class=\"pun\">.<\/span><span class=\"pln\">out<\/span><span class=\"pun\">.<\/span><span class=\"pln\">println<\/span><span class=\"pun\">(<\/span><span class=\"pln\">correctEncodedURL<\/span><span class=\"pun\">);<\/span><\/code><\/pre>\n<p>Prints<\/p>\n<pre class=\"lang-java prettyprint prettyprinted\"><code><span class=\"pln\">http<\/span><span class=\"pun\">:<\/span><span class=\"com\">\/\/search.barnesandnoble.com\/booksearch\/first%20book.pdf<\/span><\/code><\/pre>\n<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Here is, how I encode URLs in Java. Split URL into structural parts. Use java.net.URL for it. Encode each part properly Use IDN.toASCII(putDomainNameHere) to Punycode encode the host name! Use java.net.URI.toASCIIString() to percent-encode, NFC encoded unicode &#8211; (better would be NFKC!). For more info see: How to encode properly this URL URL url= new URL(&#8222;http:\/\/search.barnesandnoble.com\/booksearch\/first [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6,9,15],"tags":[],"class_list":["post-97","post","type-post","status-publish","format-standard","hentry","category-development","category-java","category-software"],"_links":{"self":[{"href":"https:\/\/jan.schnasse.org\/blog\/wp-json\/wp\/v2\/posts\/97","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jan.schnasse.org\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jan.schnasse.org\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jan.schnasse.org\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/jan.schnasse.org\/blog\/wp-json\/wp\/v2\/comments?post=97"}],"version-history":[{"count":0,"href":"https:\/\/jan.schnasse.org\/blog\/wp-json\/wp\/v2\/posts\/97\/revisions"}],"wp:attachment":[{"href":"https:\/\/jan.schnasse.org\/blog\/wp-json\/wp\/v2\/media?parent=97"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jan.schnasse.org\/blog\/wp-json\/wp\/v2\/categories?post=97"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jan.schnasse.org\/blog\/wp-json\/wp\/v2\/tags?post=97"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}