url인코딩
base64와 마찬가지로 문자열을 인코딩하여 전송하는 방법이며,
키도 없으므로 암호화가아니다.
이름처럼 url을 인코딩하는 목적으로 주로 사용한다.
Class URLEncoder (참조 oracle)
Utility class for HTML form encoding. This class contains static methods for converting a String to the
application/x-www-form-urlencoded
MIME format. For more information about HTML form encoding, consult the HTML specification.
When encoding a String, the following rules apply:
- The alphanumeric characters "
a
" through "z
", "A
" through "Z
" and "0
" through "9
" remain the same. - The special characters "
.
", "-
", "*
", and "_
" remain the same. - The space character "
+
". - All other characters are unsafe and are first converted into one or more bytes using some encoding scheme. Then each byte is represented by the 3-character string "
%xy
", where xy is the two-digit hexadecimal representation of the byte. The recommended encoding scheme to use is UTF-8. However, for compatibility reasons, if an encoding is not specified, then the default encoding of the platform is used.
- 알파벳문자열과 숫자는 별도 인코딩이 없다.
- ".","-"."*","_" 과 같은 특수무자도 인코딩 하지 않는다.
- " " 공백은 "+" 으로 변경된다.
- 위3가지 외에 나머지 문자들은 "%XY" 형식의 대문영문자열형태로 변환된다.
- "UTF-8" 타입을 추천한다. (javascript의 url encode 도 utf-8)
java URLEncoder 소스 일부
java URLEncoder 소스 일부
String str = new String(charArrayWriter.toCharArray()); byte[] ba = str.getBytes(charset); for (int j = 0; j < ba.length; j++) { out.append('%'); char ch = Character.forDigit((ba[j] >> 4) & 0xF, 16); // converting to use uppercase letter as part of // the hex value if ch is a letter. if (Character.isLetter(ch)) { ch -= caseDiff; } out.append(ch); ch = Character.forDigit(ba[j] & 0xF, 16); if (Character.isLetter(ch)) { ch -= caseDiff; } out.append(ch); }
소스코드 일부다 문자열을 바이트 배열로 변환한다음
각자리마다 추가로 >>4 연산을 통해 두글자로 만드는걸 볼 수 있다.
각자리마다 추가로 >>4 연산을 통해 두글자로 만드는걸 볼 수 있다.
ex) "ㄱ" -> 12593 -> [-29, -124, -79], -> %E3%84%B1
댓글
댓글 쓰기