퍼센트 인코딩은 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
으로 변경됩니다.
HTML form 인코딩을 위한 유틸리티 클래스입니다. 이 클래스에는 String을 application/x-www-form-urlencoded MIME 포맷으로 변환하기 위한 정적 메서드가 포함되어 있습니다. HTML 양식 인코딩에 대한 자세한 내용은 HTML 명세표를 참조하십시오.
문자열을 인코딩할 때 다음 규칙이 적용됩니다.
예를 들어 UTF-8을 인코딩 체계로 사용하면, 문자열 “The string ü@foo-bar”는 “The+string+%C3%BC%40foo-bar”로 변환됩니다. 이는 UTF-8에서 문자 ü는 2바이트 C3(16진수) 및 BC(16진수)로 인코딩되고, 문자 @는 1바이트 40(16진수)으로 인코딩되기 때문입니댜.
HTML form 디코딩을 위한 유틸리티 클래스입니다. 이 클래스에는 application/x-www-form-urlencoded MIME 형식에서 문자열을 디코딩하기 위한 정적 메서드가 포함되어 있습니다.
변환 프로세스는 URLEncoder 클래스에서 사용하는 것과 반대입니다. 인코딩된 문자열의 모든 문자는 “a” ~ “z”, “A” ~ “Z”, “0” ~ “9” 및 “-”, “_”, “.”, 그리고 “*” 중 하나입니다.
문자 “%“는 허용되지만 특수 이스케이프 시퀀스의 시작으로 해석됩니다.
변환에는 다음 규칙이 적용됩니다.
이 디코더가 잘못된 문자열을 처리할 수 있는 두 가지 가능한 방법이 있습니다. 잘못된 문자를 그대로 두거나 IllegalArgumentException을 throw할 수 있습니다. 디코더가 취하는 접근 방식은 구현에 달려 있습니다.
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 :: 돌체 비타 } }
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 } }
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 } }