URL 인코딩·디코딩
주소나 쿼리 값을 붙여 넣으면 바로 퍼센트 인코딩하거나 디코딩합니다.
입력값은 브라우저 밖으로 나가지 않음RFC 3986WHATWG URL기준일 2026.10.03
입력
출력
URL 인코딩·디코딩 사용 방법
- 1입력 칸에 주소나 글을 붙여 넣거나 「예시 넣기」를 누릅니다.
- 2방향(인코딩·디코딩), 범위(구성 요소·전체 URL·폼), 문자 인코딩을 고르면 결과가 바로 바뀝니다.
- 3「복사」로 결과를 복사하거나 「내려받기」로 .txt 파일을 저장합니다. 「바꾸기」는 결과를 입력으로 옮기고 방향을 뒤집습니다.
URL 인코딩·디코딩 옵션
- 방향
- 인코딩은 글자를 %XX로 바꾸고, 디코딩은 %XX를 글자로 되돌립니다. 기본은 인코딩입니다. 「바꾸기」를 누르면 결과가 입력으로 옮겨지고 방향이 뒤집힙니다.
- 범위
- 구성 요소(기본)는 encodeURIComponent처럼 값 하나를 통째로 인코딩해 / ? & = 도 바꿉니다. 전체 URL은 encodeURI처럼 주소의 구분자를 그대로 둡니다. 폼은 application/x-www-form-urlencoded 규칙으로 공백을 +로 적고, 디코딩할 때 +를 공백으로 읽습니다.
- 문자 인코딩
- UTF-8(기본), EUC-KR(CP949), Shift_JIS(CP932) 가운데 고릅니다. 뒤의 둘은 주소에 UTF-8을 쓰지 않는 오래된 한국·일본 시스템용입니다.
- URL 분해 표
- 입력이 https:// 같은 스킴으로 시작하는 주소 전체이면 프로토콜·호스트·경로와 쿼리의 키·값을 디코딩한 값으로 표에 보여 줍니다. 기본은 켬입니다.
퍼센트 인코딩과 이 도구의 동작
주소에는 정해진 ASCII 글자만 쓸 수 있습니다. 그 밖의 글자는 바이트마다 %와 16진수 두 자리로 적는데, 이 규칙이 RFC 3986의 퍼센트 인코딩입니다. 이 도구는 JavaScript의 encodeURIComponent·encodeURI와 같은 결과를 냅니다. 구성 요소 범위에서는 영문자·숫자와 - _ . ! ~ * ' ( )만 그대로 두고, 전체 URL 범위에서는 ; / ? : @ & = + $ , #도 남깁니다.
폼 범위는 WHATWG URL 표준의 application/x-www-form-urlencoded 규칙을 따릅니다. 영문자·숫자와 * - . _만 남기고 공백은 +로 적습니다.
전체 URL 범위로 디코딩할 때는 %2F·%3F처럼 구분자를 나타내는 이스케이프를 풀지 않고 적힌 그대로 둡니다. decodeURI와 같은 동작이며, 디코딩해도 주소의 구조가 바뀌지 않습니다.
한글 주소와 EUC-KR
퍼센트 인코딩된 글자의 바이트는 문자 인코딩에 따라 달라집니다. 제는 UTF-8에서 %EC%A0%9C, EUC-KR에서 %C1%A6입니다. 지금은 거의 모든 곳이 UTF-8을 쓰지만 오래된 한국·일본 시스템의 주소에는 EUC-KR이나 Shift_JIS가 남아 있습니다. 여기서 EUC-KR은 CP949, Shift_JIS는 CP932를 뜻하며, 브라우저가 쓰는 WHATWG Encoding 표준과 같은 기준입니다.
이 인코딩에서는 글자의 둘째 바이트가 ASCII 글자일 수 있습니다. 예를 들어 똠은 EUC-KR에서 두 바이트 8C 63이고 %8Cc로 적힙니다. 디코딩할 때 이런 시퀀스도 올바르게 읽습니다.
URL 인코딩·디코딩 예시
쿼리 값 인코딩 (기본 옵션: 인코딩, 구성 요소, UTF-8)
값 안의 &와 =도 인코딩되어 쿼리 구분자와 섞이지 않습니다.
입력
제킬로 dev&tools=1
출력
%EC%A0%9C%ED%82%AC%EB%A1%9C%20dev%26tools%3D1
주소 전체 인코딩 (범위: 전체 URL)
://, /, ?, = 같은 구분자는 그대로 두고 한글과 공백만 바꿉니다.
입력
https://dev.zekilo.com/ko/검색?q=a b
출력
https://dev.zekilo.com/ko/%EA%B2%80%EC%83%89?q=a%20b
폼 인코딩 (범위: 폼)
공백이 +가 됩니다.
입력
a b&c=제
출력
a+b%26c%3D%EC%A0%9C
EUC-KR로 인코딩 (문자 인코딩: EUC-KR)
같은 글자가 UTF-8에서는 %EC%A0%9C%ED%82%AC%EB%A1%9C입니다.
입력
제킬로
출력
%C1%A6%C5%B3%B7%CE
바뀌지 않는 기호 (구성 요소)
입력
!'()*~
출력
!'()*~
끊긴 시퀀스 (방향: 디코딩)
오류와 함께 끊긴 시퀀스가 시작하는 위치(1줄 1열)를 알려 줍니다.
입력
%E0%A4%A
출력
E_URI_MALFORMED
예시는 이 도구를 검증하는 기준 사례의 값입니다.
URL 인코딩·디코딩 자주 묻는 질문
입력값이 서버로 전송되나요?
아니요. 입력과 결과는 이 브라우저 안에서만 처리되며 저장하지도 않습니다. 새로 고침하면 사라집니다.
구성 요소와 전체 URL은 무엇이 다른가요?
구성 요소는 입력을 값 하나로 보기 때문에 / ? & = # 처럼 주소에서 뜻이 있는 글자도 인코딩합니다. 쿼리 값 하나나 경로 한 토막을 만들 때 씁니다. 전체 URL은 입력을 주소 전체로 보고 그 구분자를 남겨 두어, 결과도 그대로 열리는 주소가 됩니다.
공백이 %20이 될 때와 +가 될 때는 언제인가요?
구성 요소와 전체 URL 범위에서는 %20이 됩니다. 폼 범위에서는 +가 되는데, HTML 폼과 대부분의 쿼리 문자열이 이렇게 적습니다. 디코딩할 때 +를 공백으로 읽는 것도 폼 범위뿐입니다.
%B0%CB%BB%F6처럼 디코딩하면 깨지는 주소는 어떻게 읽나요?
UTF-8이 아니라 EUC-KR로 인코딩된 주소일 가능성이 큽니다. 방향을 디코딩으로 두고 문자 인코딩을 EUC-KR(CP949)로 바꿔 보세요. 오래된 일본 사이트의 주소라면 Shift_JIS(CP932)를 고릅니다.
「잘못된 퍼센트 인코딩」 오류는 왜 나오나요?
% 뒤에는 16진수 두 자리가 와야 하고, 풀어 낸 바이트가 고른 문자 인코딩에서 올바른 글자여야 합니다. 오류에는 끊긴 시퀀스가 시작하는 줄과 열이 함께 나옵니다. 복사하다가 글이 잘렸을 때 흔히 생깁니다.
EUC-KR이나 Shift_JIS로 표현할 수 없는 글자는 어떻게 되나요?
그런 글자가 몇 개인지 안내가 나오고, 글자마다 😀 같은 숫자 참조를 퍼센트 인코딩한 꼴로 적습니다. 브라우저가 레거시 인코딩 페이지에서 폼을 보낼 때와 같은 방식입니다.
관련 도구
처리 방식·표준
- 처리 위치: 이 브라우저 (내 기기). 전송하거나 저장하지 않습니다.
- 표준: RFC 3986 · WHATWG URL
- 엔진: ZEKILO Dev URL 인코더·디코더 (자체 구현) · EUC-KR·Shift_JIS 인코딩 표 (WHATWG Encoding index 기반) (BSD 3-Clause (WHATWG))
- 레거시 인코딩은 브라우저의 TextDecoder로 디코딩하고, WHATWG Encoding index로 만든 표로 인코딩합니다.
- 짝 없는 대리 문자는 U+FFFD(%EF%BF%BD)로 인코딩합니다.
- 빈 입력은 오류가 아닙니다. 출력이 비어 있을 뿐입니다.
- 기준일 2026.10.03
- 변경 이력: 2026.10.03 처음 공개