URL 인코딩 문자 전체 표 (ASCII + 유니코드)
URL 인코딩 문자 전체 참조 표입니다. 출력 가능한 모든 ASCII 문자(32-126), 자주 쓰이는 유니코드 문자, 그리고 `RFC 3986`에 정의된 퍼센트 인코딩 값을 다룹니다.
ASCII 제어 문자 및 특수 문자
0-31 범위의 ASCII 문자와 127번 문자는 제어 문자입니다. 이 문자들은 출력할 수 없으며 URL에서는 항상 퍼센트 인코딩해야 합니다. URL 맥락에서 가장 흔히 마주치는 제어 문자는 공백(ASCII 32), 수평 탭(ASCII 9), 그리고 개행 문자(ASCII 10과 13)입니다.
RFC 3986에 따르면, 예약되지 않은(unreserved) 문자도 아니고, 예약된 용도로 쓰이는 예약(reserved) 문자도 아니며, 퍼센트 인코딩된 세 문자(triplet)도 아닌 모든 옥텟은 반드시 퍼센트 인코딩해야 합니다. 실무적으로 이는 대부분의 영숫자가 아닌 문자를 URI 구성 요소에서 인코딩해야 한다는 뜻입니다.
| 문자 | ASCII 코드 | URL 인코딩 | 설명 |
|---|---|---|---|
| (탭) | 9 | %09 |
수평 탭 |
| (LF) | 10 | %0A |
라인 피드 |
| (CR) | 13 | %0D |
캐리지 리턴 |
| (공백) | 32 | %20 |
공백 |
출력 가능한 ASCII 문자
아래는 출력 가능한 모든 ASCII 문자(코드 32-126)와 그 URL 인코딩 형태의 전체 참조표입니다. RFC 3986에서 "unreserved(비예약)"로 표시된 문자는 인코딩이 필요하지 않습니다. 예약 문자는 본래의 예약된 용도 외로 사용될 때 반드시 인코딩해야 합니다.
| 문자 | ASCII | 16진수 | URL 인코딩 | 유형 |
|---|---|---|---|---|
| (공백) | 32 | 20 | %20 |
특수 |
| ! | 33 | 21 | %21 |
예약 |
| " | 34 | 22 | %22 |
안전하지 않음 |
| # | 35 | 23 | %23 |
예약 |
| $ | 36 | 24 | %24 |
예약 |
| % | 37 | 25 | %25 |
특수 |
| & | 38 | 26 | %26 |
예약 |
| ' | 39 | 27 | %27 |
예약 |
| ( | 40 | 28 | %28 |
예약 |
| ) | 41 | 29 | %29 |
예약 |
| * | 42 | 2A | %2A |
예약 |
| + | 43 | 2B | %2B |
예약 |
| , | 44 | 2C | %2C |
예약 |
| - | 45 | 2D | %2D |
비예약 |
| . | 46 | 2E | %2E |
비예약 |
| / | 47 | 2F | %2F |
예약 |
| 0-9 | 48-57 | 30-39 | 필요 없음 | 비예약 |
| : | 58 | 3A | %3A |
예약 |
| ; | 59 | 3B | %3B |
예약 |
| < | 60 | 3C | %3C |
안전하지 않음 |
| = | 61 | 3D | %3D |
예약 |
| > | 62 | 3E | %3E |
안전하지 않음 |
| ? | 63 | 3F | %3F |
예약 |
| @ | 64 | 40 | %40 |
예약 |
| A-Z | 65-90 | 41-5A | 필요 없음 | 비예약 |
| [ | 91 | 5B | %5B |
예약 |
| \ | 92 | 5C | %5C |
안전하지 않음 |
| ] | 93 | 5D | %5D |
예약 |
| ^ | 94 | 5E | %5E |
안전하지 않음 |
| _ | 95 | 5F | %5F |
비예약 |
| ` | 96 | 60 | %60 |
안전하지 않음 |
| a-z | 97-122 | 61-7A | 필요 없음 | 비예약 |
| { | 123 | 7B | %7B |
안전하지 않음 |
| | | 124 | 7C | %7C |
안전하지 않음 |
| } | 125 | 7D | %7D |
안전하지 않음 |
| ~ | 126 | 7E | %7E |
비예약 |
자주 쓰이는 유니코드 인코딩
유니코드 문자는 먼저 UTF-8 바이트 시퀀스로 인코딩된 뒤, 각 바이트가 개별적으로 퍼센트 인코딩됩니다. 다중 바이트 문자는 여러 개의 퍼센트 인코딩된 세 문자를 만들어 냅니다.
| 문자 | 설명 | UTF-8 바이트 | URL 인코딩 |
|---|---|---|---|
| 움라우트가 붙은 a | 분음 부호가 있는 라틴 소문자 A | C3 A4 | %C3%A4 |
| 틸데가 붙은 n | 틸데가 있는 라틴 소문자 N | C3 B1 | %C3%B1 |
| 어큐트가 붙은 e | 어큐트 악센트가 있는 라틴 소문자 E | C3 A9 | %C3%A9 |
| 움라우트가 붙은 u | 분음 부호가 있는 라틴 소문자 U | C3 BC | %C3%BC |
| 유로 기호 | 유로 기호 | E2 82 AC | %E2%82%AC |
| 파운드 기호 | 파운드 기호 | C2 A3 | %C2%A3 |
| 엔 기호 | 엔 기호 | C2 A5 | %C2%A5 |
| CJK 중(中) | CJK 통합 한자 (가운데 中) | E4 B8 AD | %E4%B8%AD |
| 키릴 문자 Ya | 키릴 대문자 Ya | D0 AF | %D0%AF |
| 아랍 문자 Ba | 아랍 문자 Ba | D8 A8 | %D8%A8 |
다중 바이트 문자가 인코딩되는 방식
UTF-8은 가변 길이 인코딩 방식을 사용합니다. ASCII 범위(0-127)의 문자는 1바이트를 사용합니다. 이 범위를 벗어나는 문자는 2에서 4바이트를 사용합니다. 퍼센트 인코딩을 할 때는 UTF-8 표현의 각 바이트가 개별적인 %XX 세 문자가 됩니다.
2바이트 문자(U+0080 ~ U+07FF): 여기에는 대부분의 라틴 확장, 그리스, 키릴, 아랍 문자가 포함됩니다. 예를 들어 독일어 문자 sharp s(U+00DF)는 UTF-8 바이트 C3 9F로 인코딩되고, 이는 %C3%9F가 됩니다.
3바이트 문자(U+0800 ~ U+FFFF): 여기에는 CJK 문자, 대부분의 기호, 그리고 기본 다국어 평면(Basic Multilingual Plane)이 포함됩니다. 예를 들어 일본어 히라가나 문자(U+3042)는 UTF-8 바이트 E3 81 82로 인코딩되고, 이는 %E3%81%82가 됩니다.
4바이트 문자(U+10000 ~ U+10FFFF): 여기에는 이모지와 보충 문자가 포함됩니다. 예를 들어 활짝 웃는 얼굴 이모지(U+1F600)는 UTF-8 바이트 F0 9F 98 80으로 인코딩되고, 이는 %F0%9F%98%80이 됩니다.
// 다중 바이트 인코딩에 대한 JavaScript 예제
console.log(encodeURIComponent('움라우트가 붙은 u'));
// 2바이트: "%C3%BC"
console.log(encodeURIComponent('CJK 문자'));
// 3바이트: "%E4%B8%AD"
console.log(encodeURIComponent('이모지'));
// 4바이트: "%F0%9F%98%80"
// 디코딩해서 확인할 수 있습니다
console.log(decodeURIComponent('%C3%BC')); // 움라우트가 붙은 u
console.log(decodeURIComponent('%E4%B8%AD')); // CJK 문자