====== URLEncoder And URLDecoder ====== * description : URLEncoder And URLDecoder * author : 오션 * email : shlim@repia.com * lastupdate : 2022-04-14 Thu \\ \\ ====== Percent-encoding ====== 퍼센트 인코딩은 URL 컨텍스트에서 특정 의미를 가지는 8bit 문다를 인코딩하는 메커니즘입니다.\\ 퍼센트 인코딩은 URL 인코딩이라고 불리기도 합니다. 퍼센트 인코딩은 기호 % 다음에 대체 문자의 ASCII 값을 나타내는 16진수 표현식으로 표시됩니다.\\ \\ 인토딩이 필요한 특수문자는 **'':''**, **''/''**, **''?''**, **''#''**, **''[''**, **'']''**, **''@''**, **''!''**, **''$''**, **''&''**, ''**'**'', **''(''**, **'')''**, **''*''**, **''+''**, **'',''**, **'';''**, **''=''**, **''%''** 입니다. 다른 문자는 인코딩할 필요가 없지만 인코딩을 할 수 있습니다.\\ \\ ^ No ^ Character ^ Encoding ^ No ^ Character ^ Encoding ^ No ^ Character ^ Encoding ^ No ^ Character ^ Encoding ^ | 1 | **'':''** | **''%3A''** | 6 | **'']''** | **''%5D''** | 11 | ''**'**'' | **''%27''** | 16 | **'',''** | **''%2C''** | | 2 | **''/''** | **''%2F''** | 7 | **''@''** | **''%40''** | 12 | **''(''** | **''%28''** | 17 | **'';''** | **''%3B''** | | 3 | **''?''** | **''%3F''** | 8 | **''!''** | **''%21''** | 13 | **'')''** | **''%29''** | 18 | **''=''** | **''%3D''** | | 4 | **''#''** | **''%23''** | 9 | **''$''** | **''%24''** | 14 | **''*''** | **''%2A''** | 19 | **''%''** | **''%25''** | | 5 | **''[''** | **''%5B''** | 10 | **''&''** | **''%26''** | 15 | **''+''** | **''%2B''** | 20 | ''**' '**''| **''%20''** or **''+''** | \\ 컨텍스트에 따라 ''**' '**'' 문자는 **''+''**%%(%%**''application/x-www-form-urlencoded''** 메시지에 사용되는 퍼센트 인코딩 버전에서와 같이) 또는 URL상에 표시되는 것과 같은 **''%20''**으로 변경됩니다.\\ \\ \\ ====== Class URLEncoder ====== HTML form 인코딩을 위한 유틸리티 클래스입니다. 이 클래스에는 String을 application/x-www-form-urlencoded MIME 포맷으로 변환하기 위한 정적 메서드가 포함되어 있습니다. HTML 양식 인코딩에 대한 자세한 내용은 [[https://www.w3.org/TR/html4/|HTML 명세표]]를 참조하십시오.\\ \\ 문자열을 인코딩할 때 다음 규칙이 적용됩니다.\\ \\ * 영숫자 문자 "a" ~ "z", "A" ~ "Z" 및 "0" ~ "9"는 그대로 유지됩니다. * 특수 문자 ".", "-", "*" 및 "_"는 그대로 유지됩니다. * 공백 문자 " "는 더하기 기호 "+"로 변환됩니다. * 다른 모든 문자는 안전하지 않기 때문에, 먼저 일부 인코딩 체계를 사용하여 하나 이상의 바이트로 변환됩니다. 그런 다음 각 바이트는 3자 문자열 "%xy"로 표시됩니다. 여기서 xy는 바이트의 2자리 16진수 표현입니다. 사용을 권장하는 인코딩 체계는 UTF-8입니다. 그러나 호환성의 이유로, 인코딩을 지정하지 않으면 플랫폼의 기본 인코딩이 사용됩니다. \\ 예를 들어 UTF-8을 인코딩 체계로 사용하면, 문자열 "The string ü@foo-bar"는 "The+string+%C3%BC%40foo-bar"로 변환됩니다. 이는 UTF-8에서 문자 ü는 2바이트 C3(16진수) 및 BC(16진수)로 인코딩되고, 문자 @는 1바이트 40(16진수)으로 인코딩되기 때문입니댜.\\ \\ \\ ====== Class URLDecoder ====== HTML form 디코딩을 위한 유틸리티 클래스입니다. 이 클래스에는 application/x-www-form-urlencoded MIME 형식에서 문자열을 디코딩하기 위한 정적 메서드가 포함되어 있습니다.\\ \\ 변환 프로세스는 URLEncoder 클래스에서 사용하는 것과 반대입니다. 인코딩된 문자열의 모든 문자는 "a" ~ "z", "A" ~ "Z", "0" ~ "9" 및 "-", "_", ".", 그리고 "*" 중 하나입니다.\\ 문자 "%"는 허용되지만 특수 이스케이프 시퀀스의 시작으로 해석됩니다.\\ \\ 변환에는 다음 규칙이 적용됩니다. * 영숫자 문자 "a" ~ "z", "A" ~ "Z" 및 "0" ~ "9"는 그대로 유지됩니다. * 특수 문자 ".", "-", "*" 및 "_"는 그대로 유지됩니다. * 더하기 기호 "+"는 공백 문자 " "로 변환됩니다. * "%xy" ​​형식의 시퀀스는 xy가 8비트를 두 자리의 16진수 표현인 바이트를 나타내는 것으로 처리됩니다. 그런 다음 이러한 바이트 시퀀스 중 하나 이상을 연속적으로 포함하는 모든 하위 문자열은 인코딩이 해당 연속 바이트를 생성하는 문자로 대체됩니다. 이러한 문자를 디코딩하는 데 사용되는 인코딩 체계가 지정될 수 있으며, 지정되지 않은 경우 플랫폼의 기본 인코딩이 사용됩니다. \\ 이 디코더가 잘못된 문자열을 처리할 수 있는 두 가지 가능한 방법이 있습니다. 잘못된 문자를 그대로 두거나 IllegalArgumentException을 throw할 수 있습니다. 디코더가 취하는 접근 방식은 구현에 달려 있습니다.\\ \\ ==== Example 1 ==== package com.ocean.escapehtml; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.net.URLEncoder; public class PercentEncode { // 돌체 비타 %EB%8F%8C%EC%B2%B4+%EB%B9%84%ED%83%80 public static void main(String[] args) throws UnsupportedEncodingException { String encodedText = "돌체 비타"; encodedText = URLEncoder.encode(encodedText, "UTF-8").replaceAll("\\+", "%20"); System.out.println("encodedText :: " + encodedText); // encodedText :: %EB%8F%8C%EC%B2%B4%20%EB%B9%84%ED%83%80 String decodedText = encodedText; decodedText = URLDecoder.decode(decodedText, "UTF-8"); System.out.println("decodedText :: " + decodedText); // decodedText :: 돌체 비타 } } \\ \\ ==== Example 2 ==== package com.ocean.escapehtml; import java.io.UnsupportedEncodingException; import java.net.MalformedURLException; import java.net.URL; import java.net.URLEncoder; public class URLEncoderExample { public static void main(String[] args) throws MalformedURLException, UnsupportedEncodingException { // base URL String baseurl = "https://www.javaguides.net/search?q="; // String to be encoded String query = "core+java+tutorial"; URL url = new URL(baseurl + query); System.out.println("URL without encoding : " + url); // URL without encoding : https://www.javaguides.net/search?q=core+java+tutorial // encode() method url = new URL(baseurl + URLEncoder.encode(query, "UTF-8")); System.out.println("URL after encoding : " + url); // URL after encoding : https://www.javaguides.net/search?q=core%2Bjava%2Btutorial } } \\ \\ ==== Example 3 ==== package com.ocean.escapehtml; import java.io.UnsupportedEncodingException; import java.net.MalformedURLException; import java.net.URL; import java.net.URLDecoder; import java.net.URLEncoder; public class URLDecoderExample { public static void main(String[] args) throws MalformedURLException, UnsupportedEncodingException { // base URL String baseurl = "https://www.javaguides.net/search?q="; // String to be encoded String query = "core+java+tutorial"; URL url = new URL(baseurl + query); System.out.println("(1) Original URL: " + url); // (1) Original URL: https://www.javaguides.net/search?q=core+java+tutorial String encodedStr = URLEncoder.encode(query, "UTF-8"); url = new URL(baseurl + encodedStr); System.out.println("(2) Encoded URL : " + url); // (2) Encoded URL : https://www.javaguides.net/search?q=core%2Bjava%2Btutorial // decode() method String decodedStr = URLDecoder.decode(encodedStr, "UTF-8"); System.out.println("(3) Decoded URL : " + baseurl + decodedStr); // (3) Decoded URL : https://www.javaguides.net/search?q=core+java+tutorial } } ===== Ref Site ===== [[https://developer.mozilla.org/en-US/docs/Glossary/percent-encoding|Percent-encoding]]\\ \\ [[https://docs.oracle.com/javase/7/docs/api/java/net/URLEncoder.html|Class URLEncoder]]\\ \\ [[https://docs.oracle.com/javase/7/docs/api/java/net/URLDecoder.html|Class URLDecoder]]\\ \\ [[https://www.javaguides.net/2019/05/java-urlencoder-and-urldecoder-class.html|URLEncoder Class Overview]]\\ \\ {{tag> 오션, URLEncoder, encode, URLDecoder, decode, PercentEncoding}}