URL 디코더

퍼센트 인코딩된 URL 디코딩

예시 시도

인코딩된 URL / 텍스트

디코딩됨

로컬에서 실행 · 시크릿 붙여넣기 안전
디코딩 출력...
이것도 써보세요:URL 인코더

URL 디코딩이란?

URL 디코딩(퍼센트 디코딩)은 URL 인코딩의 역과정으로, 퍼센트 인코딩된 시퀀스를 원래 문자로 변환합니다. 퍼센트 기호 뒤에 두 자리 16진수(%XX)가 오는 모든 경우는 XX가 나타내는 바이트로 대체됩니다. 연속으로 인코딩된 여러 바이트는 원래의 UTF-8 문자를 재구성하기 위해 다시 결합됩니다.

URL 디코딩은 API, 웹 스크래핑, 로그 분석, 인증 흐름을 다루는 개발자에게 일상적인 작업입니다. 인코딩된 URL은 기계가 읽을 수 있지만 사람에게는 불투명합니다. 디코딩하면 실제 경로, 검색 쿼리, 리다이렉트 대상, 파라미터 값이 즉시 드러납니다.

이 도구를 사용하는 이유

퍼센트 인코딩된 URL이나 쿼리 문자열을 빠르게 이해할 수 있습니다. 브라우저 콘솔 불필요, 서버 전송 없음.

즉시 디코딩
인코딩된 URL이나 파라미터를 붙여넣으면 사람이 읽을 수 있는 형식으로 즉시 표시됩니다. API 요청 및 로그 파일 디버깅에 유용합니다.
🛡️
오류 복구
decodeURIComponent에서 실패할 수 있는 구식 Latin-1 퍼센트 인코딩 문자가 포함된 입력에 대해 레거시 unescape()로 자동 폴백합니다.
🔒
클라이언트 전용
모든 디코딩은 브라우저에서 로컬로 실행됩니다. 토큰, 비밀번호, 개인 쿼리 파라미터가 기기 밖으로 나가지 않습니다.
🔁
완전한 URL 지원
전체 URL과 개별 파라미터 값 모두 디코딩할 수 있습니다. 표준 %20 공백을 처리하고 + 기호는 리터럴 플러스 문자로 유지합니다.

이 온라인 URL 디코더 사용 방법

계정 없음, 설치 없음. 퍼센트 인코딩된 문자열을 입력 필드에 붙여넣으면 디코딩된 결과가 즉시 나타납니다. 모든 작업이 브라우저에서 실행됩니다 — 데이터가 기기를 벗어나지 않습니다.

  1. 1
    인코딩된 URL 또는 문자열 붙여넣기
    퍼센트 인코딩된 문자열을 복사하여 입력 필드에 붙여넣으세요 — 브라우저 주소 표시줄의 URL, 서버 로그의 쿼리 파라미터, API 응답 또는 리다이렉트 대상 등 무엇이든 가능합니다.
  2. 2
    자동 형식 감지
    디코더는 %XX 퍼센트 인코딩과 + 를 공백으로 처리하는 형식(application/x-www-form-urlencoded) 모두를 자동으로 처리합니다. 인코딩 형식을 수동으로 지정할 필요가 없습니다.
  3. 3
    디코딩된 출력 확인
    사람이 읽을 수 있는 텍스트가 즉시 표시됩니다. 입력에 중첩 인코딩(이중 인코딩된 문자열)이 포함된 경우 디코더가 한 번에 한 계층씩 해석합니다. 잘못된 %XX 시퀀스에 대해 오류가 표시됩니다.
  4. 4
    복사 또는 재인코딩
    복사를 클릭하여 디코딩된 문자열을 가져옵니다. 다른 설정으로 다시 인코딩해야 합니까? URL 인코더 도구로 클릭 한 번에 전환하세요.

디코딩 동작 원리

디코더는 입력에서 % 시퀀스를 검색하고, 각 두 자리 16진수 그룹을 바이트 값으로 변환하며, 연속된 바이트 시퀀스를 그룹화하고, 최종 유니코드 문자를 생성하기 위해 UTF-8로 해석합니다.

예시
입력:https%3A%2F%2Fexample.com%2Fsearch%3Fq%3Dhello%20world
%3A:  %2F/  %3F?  %3D=  %20space
출력:https://example.com/search?q=hello world

퍼센트 인코딩 문자 참조표

가장 자주 접하는 퍼센트 인코딩 시퀀스에 대한 빠른 참조:

인코딩 형식문자나타나는 위치
%20spacepath segments, query values
%2B+literal plus (not a space in query)
%2F/slash inside a path component
%3F?literal question mark in a value
%23#literal hash in a value
%26&literal ampersand in a value
%3D=literal equals sign in a value
%40@at sign in username / password
%3A:colon inside a path segment
%25%literal percent sign
%2C,comma in path or query
%5B[opening bracket
%5D]closing bracket
%7B{curly brace in template literals
%7D}curly brace in template literals

주요 사용 사례

API 요청 디버깅
브라우저 DevTools 네트워크 로그에서 URL을 복사하여 디코딩하면 실제 쿼리 파라미터 값을 확인할 수 있습니다. 자동화 도구나 라이브러리가 파라미터를 퍼센트 인코딩한 경우 특히 유용합니다.
로그 파일 읽기
웹 서버 액세스 로그와 애플리케이션 로그는 URL을 인코딩된 형식으로 저장합니다. 디코딩하여 실제 요청 경로, 검색어, 파라미터 값을 확인합니다.
리다이렉트 확인
OAuth 콜백, SSO 리다이렉트, 링크 추적 URL에는 대량으로 인코딩된 redirect_uri 또는 next 파라미터가 포함되어 있습니다. URL을 디코딩하여 의도된 목적지를 추적합니다.
Webhook 페이로드 파싱
application/x-www-form-urlencoded로 전송된 Webhook 본문(Stripe, Twilio, GitHub)은 퍼센트 인코딩된 문자열로 도착합니다. 디코딩하여 실제 필드 값을 읽습니다.
검색 쿼리 추출
분석 URL과 Referer 헤더에는 q= 파라미터에 퍼센트 인코딩된 사용자의 원래 검색 쿼리가 포함되어 있습니다. 디코딩하여 실제 검색어를 표시하거나 분석합니다.
URL 역공학
서드파티 API 통합이나 스크래핑 시 접하는 URL에는 인코딩된 경로 세그먼트와 파라미터가 포함되어 있습니다. 디코딩하여 URL 구조를 이해하고 요청을 재현합니다.

흔한 실수

퍼센트 인코딩된 문자열을 디코딩할 때 가장 자주 발생하는 실수들:

+와 %20 혼동
application/x-www-form-urlencoded 데이터(HTML 폼 제출)에서 +는 공백을 나타냅니다. 하지만 원시 URL 경로나 encodeURIComponent로 인코딩된 값에서 +는 리터럴 플러스 기호입니다. decodeURIComponent는 +를 공백으로 변환하지 않습니다. 폼 데이터에는 URLSearchParams 또는 unquote_plus를 사용하세요.
이중 인코딩된 문자열
문자열이 두 번 인코딩된 경우 한 번 디코딩하면 퍼센트 기호가 남습니다: %2520은 공백이 아닌 %20으로 디코딩됩니다. 원래 값을 얻으려면 두 번째 디코딩이 필요합니다. 이미 인코딩된 데이터를 재인코딩하는 로그, 프록시, 미들웨어에서 주의하세요.
잘못된 퍼센트 시퀀스
단독 %나 16진수가 아닌 문자 뒤에 오는 % (예: %GG 또는 % 2)는 유효하지 않으며 URIError를 발생시킵니다. 항상 입력을 검증하거나 디코딩을 try/catch로 감싸세요.
인코딩 불일치 (Latin-1 vs UTF-8)
구형 시스템(PHP의 urlencode, 클래식 ASP)은 문자를 Latin-1 바이트로 인코딩했습니다. Latin-1로 인코딩된 문자열은 UTF-8 디코더로 올바르게 디코딩되지 않을 수 있습니다. 깨진 문자가 보이면 레거시 unescape() 방법을 시도하거나 원래 인코딩을 확인하세요.

코드 예시

주요 언어 및 환경에서 URL 문자열을 디코딩하는 방법:

JavaScript (browser / Node.js)
// Decode a percent-encoded component
decodeURIComponent('hello%20world%20%26%20more') // → "hello world & more"

// Decode a full URL (leaves structure characters encoded)
decodeURI('https://example.com/path?q=hello%20world') // → "https://example.com/path?q=hello world"

// Parse a query string (handles + as space automatically)
const params = new URLSearchParams('q=hello+world&lang=en')
params.get('q') // → "hello world"
Python
from urllib.parse import unquote, unquote_plus, parse_qs

# Decode percent-encoded string
unquote('hello%20world%20%26%20more')   # → 'hello world & more'

# Decode form-encoded string (+ → space)
unquote_plus('hello+world%21')          # → 'hello world!'

# Parse full query string
parse_qs('q=hello%20world&lang=en')     # → {'q': ['hello world'], 'lang': ['en']}
Node.js (URL API)
const url = new URL('https://example.com/search?q=hello%20world%20%26%20more')
url.searchParams.get('q')  // → "hello world & more"
url.pathname               // → "/search"
CLI (bash)
# Decode with Python one-liner
python3 -c "from urllib.parse import unquote; print(unquote('hello%20world'))"

# Decode with Node.js
node -e "console.log(decodeURIComponent('hello%20world%20%26'))"

URL 디코더 vs. 대안

여러 도구가 퍼센트 인코딩된 문자열을 디코딩할 수 있지만, 명확성, 개인정보 보호, 편의성 면에서 차이가 있습니다.

이 도구
브라우저 기반, 즉시, 비공개. %XX 인코딩, + 를 공백으로, Unicode, 잘못된 시퀀스를 처리합니다. 어떤 서버에도 데이터를 전송하지 않습니다.
브라우저 주소 표시줄
브라우저는 표시를 위해 URL을 디코딩하지만 항상 완전하지는 않습니다 — 일부 인코딩된 문자가 주소 표시줄에 계속 보일 수 있습니다. 개별 파라미터 값을 검사하는 데 유용하지 않습니다.
DevTools / curl -v
브라우저 DevTools와 curl은 네트워크 요청에서 원시 및 디코딩된 URL을 표시합니다. 디버깅에 유용하지만 도구를 전환하고 어디를 봐야 하는지 알아야 합니다.

자주 묻는 질문

decodeURIComponent와 decodeURI의 차이점은 무엇인가요?
decodeURIComponent는 예약 문자(%2F → /, %3F → ? 등)를 포함한 모든 퍼센트 인코딩 시퀀스를 디코딩합니다. decodeURI는 URL에서 특별한 의미를 갖는 문자를 생성하지 않을 시퀀스만 디코딩하며, %2F, %3F, %23 등 구조적 문자는 인코딩된 상태로 유지합니다. 파라미터 값에는 decodeURIComponent를 사용하고, 전체 URL을 갖고 구조를 유지하고 싶을 때만 decodeURI를 사용하세요.
URIError: malformed URI가 발생하는 이유는?
decodeURIComponent의 이 오류는 입력에 두 개의 유효한 16진수가 뒤따르지 않는 %가 있거나, 멀티바이트 UTF-8 시퀀스가 불완전할 때(예: 뒤따르는 %82%AC 없이 %E2만 있는 경우) 발생합니다. 디코딩 전에 고립된 퍼센트 기호를 제거하거나 이스케이프하세요.
디코딩에서 +는 공백으로 처리되나요?
아니요 — decodeURIComponent는 +를 공백이 아닌 리터럴 플러스 기호로 처리합니다. + → 공백 변환은 application/x-www-form-urlencoded 데이터(HTML 폼 제출)에만 적용됩니다. 폼 인코딩 데이터를 디코딩하려면 URLSearchParams(브라우저/Node) 또는 urllib.parse.unquote_plus(Python)를 사용하세요.
URL 디코딩을 클라이언트 측에서 수행해도 안전한가요?
네 — URL 디코딩은 네트워크 요청 없이 순수한 변환 작업입니다. 모든 현대 브라우저에 decodeURIComponent와 decodeURI가 내장 함수로 포함되어 있습니다. 이 도구는 디코딩을 완전히 브라우저 내에서 수행하며, 어떤 데이터도 전송되지 않습니다.
여러 번 인코딩된 URL을 디코딩하려면?
출력이 안정될 때까지(더 이상 %시퀀스가 해결되지 않을 때까지) 여러 번 디코딩하세요. 이미 인코딩된 URL이 다른 인코더를 통과할 때 발생합니다. 각 디코딩 단계에서 인코딩 레이어가 하나씩 제거됩니다.
%XX는 무엇을 나타내나요?
% 뒤의 두 문자는 단일 바이트 값(00–FF)을 나타내는 16진수입니다. ASCII 문자의 경우 이 바이트는 문자의 ASCII 코드입니다: %41 = 65 = 'A'. 비ASCII 문자의 경우 여러 %XX 시퀀스가 문자의 UTF-8 바이트 시퀀스를 나타냅니다: 유로 기호 €는 %E2%82%AC(3바이트: 0xE2, 0x82, 0xAC)입니다.
브라우저는 HTML 폼을 제출할 때 어떤 인코딩을 사용합니까?
method=GET인 HTML 폼은 application/x-www-form-urlencoded 인코딩을 사용하여 필드를 URL에 추가합니다. 공백은 %20 대신 +로 대체되고 다른 특수 문자는 퍼센트 인코딩됩니다. URL Decode 도구의 + → 공백 옵션이 이 형식을 처리합니다. method=POST이고 enctype=application/x-www-form-urlencoded인 폼은 요청 본문에서 동일한 방식을 사용합니다.
디코딩에 크기 제한이 있습니까?
서버 측 제한 없음 — 도구가 완전히 브라우저에서 실행됩니다. 실제 제한은 브라우저의 메모리에 따라 다릅니다. 매우 긴 인코딩된 문자열이나 일괄 처리에는 스크립트에서 decodeURIComponent를 사용하세요.