본문으로 건너뛰기
ZEKILO Dev

URL 인코딩·디코딩

주소나 쿼리 값을 붙여 넣으면 바로 퍼센트 인코딩하거나 디코딩합니다.

입력값은 브라우저 밖으로 나가지 않음RFC 3986WHATWG URL기준일 2026.10.03

입력

Esc를 누른 뒤 Tab을 누르면 입력란에서 나갑니다.

출력

URL 인코딩·디코딩 사용 방법

  1. 1입력 칸에 주소나 글을 붙여 넣거나 「예시 넣기」를 누릅니다.
  2. 2방향(인코딩·디코딩), 범위(구성 요소·전체 URL·폼), 문자 인코딩을 고르면 결과가 바로 바뀝니다.
  3. 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 처음 공개
오픈소스 라이선스 →
결과가 이상한가요? 오류 신고하기(입력값은 첨부되지 않습니다)