MCP로 연결 →

계산 입력

공식

광고

결과

결과
hello%20world%21
입력 길이 (글자 수) 12
출력 길이 (글자 수) 16

URL 인코딩이란?

URL 인코딩은 퍼센트 인코딩(percent-encoding)이라고도 불리며, RFC 3986에서 정의한 방식으로 임의의 데이터를 URI(Uniform Resource Identifier) 안에 표현하기 위한 규칙입니다. 공백, 슬래시(/), 물음표(?), 앰퍼샌드(&), 그리고 ASCII가 아닌 문자 등 많은 문자들은 URL 안에서 특별한 의미를 갖거나 그대로 사용하기에 안전하지 않습니다. 퍼센트 인코딩은 이러한 각 바이트를 퍼센트 기호(%)와 그 바이트 값을 나타내는 두 자리 16진수로 바꿔 줍니다.

공백 문자가 퍼센트 인코딩된 바이트로 매핑되는 다이어그램
URL 인코딩 시 안전하지 않은 문자는 %XX 형식의 16진수 바이트로 변환됩니다.

계산기 사용법

일반 텍스트를 URL에서 안전하게 쓸 수 있는 문자열로 바꾸려면 인코딩(Encode)을, 퍼센트 인코딩된 문자열을 다시 사람이 읽을 수 있는 텍스트로 되돌리려면 디코딩(Decode)을 선택하세요. 텍스트를 입력하거나 붙여넣은 뒤 실행하면 됩니다. 이 도구는 입력과 출력의 문자 길이도 함께 보여 주므로, 인코딩으로 인해 문자열이 얼마나 길어졌는지 한눈에 확인할 수 있습니다.

변환 원리

비예약(unreserved) 문자 집합은 A–Z a–z 0–9 - _ . ~ 입니다. 이 집합에 포함되지 않는 바이트는 모두 인코딩됩니다. 인코딩 규칙은 다음과 같습니다.

$$\text{Output} = \operatorname{encode}\!\left(\text{Text}\right) = \text{each byte} \to \begin{cases} \text{char}, & \text{if unreserved } (A\text{-}Z,\,a\text{-}z,\,0\text{-}9,\,\text{-}\_.\sim) \\ \text{\%XX}, & \text{otherwise (UTF-8 hex)} \end{cases}$$

예를 들어 공백 문자는 바이트 값이 32이고 16진수로는 0x20이므로 %20으로 변환됩니다. 텍스트는 먼저 UTF-8로 바이트화되기 때문에, 이모지나 악센트가 붙은 문자처럼 여러 바이트로 이루어진 문자는 바이트 단위로 하나씩 인코딩됩니다. 디코딩은 이 과정을 거꾸로 진행합니다. 각 %XX 묶음을 16진수 바이트로 해석하고, 모인 바이트들을 다시 UTF-8로 읽어 들입니다.

$$\text{Output} = \operatorname{decode}\!\left(\text{Text}\right) = \text{scan} \to \begin{cases} \text{byte}(XX), & \text{for each } \text{\%XX} \\ \text{space}, & \text{for } + \\ \text{char}, & \text{otherwise} \end{cases}\ \text{as UTF-8}$$
광고
바이트가 두 개의 16진수로 나뉘어 퍼센트 코드를 이루는 모습
안전하지 않은 각 바이트는 퍼센트 기호와 두 자리 16진수 값으로 바뀝니다.

예제로 보기

hello world!를 인코딩해 보겠습니다. h-e-l-l-o 같은 알파벳은 비예약 문자라서 그대로 유지됩니다. 공백은 %20이 되고, 느낌표(바이트 33 = 0x21)는 %21이 됩니다. 따라서 결과는 \(\text{hello}\%20\text{world}\%21\)이 됩니다.

자주 묻는 질문

플러스 기호(+)를 공백으로 인코딩하나요? 인코딩할 때 공백은 RFC 3986 방식에 따라 %20으로 변환됩니다. 반대로 디코딩할 때는 폼 데이터와의 호환을 위해 그대로 입력된 +를 공백으로 처리합니다.

어떤 문자는 왜 그대로 남나요? 영문자, 숫자, 그리고 네 가지 비예약 기호 - _ . ~는 RFC 3986에서 인코딩이 전혀 필요하지 않기 때문입니다.

유니코드도 지원하나요? 네. 텍스트는 UTF-8로 처리되므로 ASCII 범위를 벗어나는 문자는 여러 개의 %XX 바이트로 인코딩되고, 다시 정확하게 디코딩됩니다.

최종 업데이트: