utilduck
Home · 개발자 · URL 인코더 / 디코더

URL 인코더 / 디코더

텍스트나 URL 컴포넌트를 붙여넣고 인코드 또는 디코드를 선택하면 즉시 결과가 나옵니다.

결과
-

URL 인코딩이란

URL은 제한된 ASCII 문자만 포함할 수 있습니다. 공백·앰퍼샌드·비ASCII 문자는 퍼센트 인코딩을 거쳐 퍼센트 기호와 두 자리 16진수로 치환됩니다. 예를 들어 공백은 %20, ä는 %C3%A4가 됩니다.

이 도구는 문자·숫자 및 - _ . ! ~ * ( )를 제외한 모든 문자를 인코딩하는 encodeURIComponent를 사용합니다. 전체 URL이 아닌 쿼리 파라미터 값이나 경로 세그먼트를 인코딩할 때 적합한 함수입니다.

URL 컴포넌트를 퍼센트 인코딩하는 법

URL에서 사용할 텍스트를 퍼센트 인코딩하려면 비예약 문자 집합(영문자·숫자·- _ . ! ~ * ' ( )) 밖의 모든 문자를 UTF-8 바이트 값을 나타내는 퍼센트 기호와 16진수 두 자리로 바꿉니다. 예: 'hello world'는 'hello%20world', 'café'는 'caf%C3%A9'가 됩니다.

URL 컴포넌트 퍼센트 인코딩·디코딩 단계

  1. 입력 텍스트를 UTF-8 바이트로 변환합니다. 비ASCII 문자는 바이트 하나 이상으로 표현될 수 있습니다.
  2. 각 바이트를 검사해 비예약 문자(A-Z, a-z, 0-9, - _ . ! ~ * ' ( ))에 해당하면 그대로 둡니다.
  3. 그 외 바이트는 퍼센트 기호와 대문자 16진수 두 자리로 바꿉니다. 예를 들어 공백(0x20)은 %20이 됩니다.
  4. 결과를 이어 붙이면 원문의 퍼센트 인코딩된 URL 안전 표현이 완성됩니다.
  5. 디코딩할 때는 % 뒤 16진수 두 자리를 찾아 각각 바이트 값으로 되돌리고, UTF-8 바이트를 다시 조합해 원문 텍스트를 복원합니다.

퍼센트 인코딩 규칙

예약·비안전 바이트 -> %XX (XX는 해당 바이트 값을 나타내는 대문자 16진수 두 자리)
  • 비예약 문자 = A-Z, a-z, 0-9, - _ . ! ~ * ' ( ) — 인코딩하지 않음
  • %XX = 원문 문자의 UTF-8 인코딩 중 바이트 하나를 나타내는 퍼센트 기호 + 16진수 두 자리

인코딩 결과 예시

텍스트인코딩 결과
hello worldhello%20world
a=b&c=da%3Db%26c%3Dd
cafécaf%C3%A9
100% off!100%25%20off!
user@example.comuser%40example.com

자주 묻는 질문

encodeURIComponent는 왜 ! ~ * ' ( )는 인코딩하지 않나요?

이 문자들은 영문자·숫자·- _ .와 함께 URI 컴포넌트에 그대로 써도 안전하며 특별한 의미를 갖지 않도록 정의되어 있어 자바스크립트 encodeURIComponent가 그대로 둡니다. encodeURI 같은 함수는 컴포넌트 하나가 아니라 URL 전체를 인코딩하기 위한 것이라 더 넓은 예약 문자 집합을 다르게 취급합니다.

URL 컴포넌트 인코딩과 URL 전체 인코딩은 어떻게 다른가요?

쿼리 파라미터 값처럼 컴포넌트 하나만 인코딩할 때는 &, =처럼 URL 구조로 오인될 수 있는 문자를 이스케이프해야 합니다. URL 전체를 인코딩할 때는 :, /, ?, & 같은 구조 문자를 그대로 두어야 URL이 제대로 파싱되므로 encodeURIComponent와 encodeURI는 다르게 동작합니다.

공백이 어떤 때는 %20, 어떤 때는 +로 바뀌는 이유는?

%20은 URL 경로와 encodeURIComponent 출력에서 쓰는 일반적인 공백 퍼센트 인코딩입니다. +로 공백을 표현하는 방식은 HTML 폼 제출과 쿼리 문자열에 쓰이는 application/x-www-form-urlencoded 형식만의 관례이며 일반 URL 인코딩 규칙은 아닙니다.

일부 입력을 디코딩하면 오류가 나는 이유는?

%가 유효한 16진수 두 자리로 이어지지 않거나, 디코딩된 바이트가 올바른 UTF-8을 이루지 못할 때 오류가 발생합니다. 예를 들어 %E2%9처럼 마지막 바이트가 빠진 불완전한 퍼센트 시퀀스를 붙여 넣으면 실패합니다. 입력이 완전하고 올바르게 인코딩됐는지 확인하세요.

이 도구는 자바스크립트 encodeURIComponent·decodeURIComponent로 텍스트 값 하나를 인코딩·디코딩하며 RFC 3986의 비예약 문자 기준을 따릅니다. URL 전체의 구조(스킴·호스트·경로·쿼리)를 구성 요소별로 파싱·검증하지는 않습니다.

근거·출처: RFC 3986 - 통합 자원 식별자(URI) 일반 구문

개인정보와 안전성

  • 브라우저에서 계산 — 입력한 값은 사용 중인 기기 안에서만 계산됩니다. utilduck 서버로 전송되지 않습니다.
  • 암호화된 연결 — 모든 페이지는 HTTPS로 제공되어 통신 구간에서 내용을 읽을 수 없습니다.
  • 제3자에게 전달하지 않음 — 입력한 값은 분석·광고 서비스로 넘어가지 않습니다.
  • 저장하지 않음 — 계산 결과를 서버에 저장하지 않으며 회원가입도 필요 없습니다.

최종 업데이트: 2026-08-17