URL 인코딩 / 디코딩
인코딩URL 구성 요소 및 전체 URL의 퍼센트 인코딩(RFC 3986).
이 페이지에서
URL 인코딩이란?#
URL은 이스케이프되지 않은 문자의 작은 집합(ASCII 문자, 숫자, -, _, ., ~ 같은 소수의 기호)만 담을 수 있습니다. 그 외의 모든 것(공백, &, 중국어 문자, 이모지, 심지어 경로 구분자가 아니라 데이터로 쓰인 /)은 퍼센트 인코딩 이스케이프 로 쓰여야 합니다. % 뒤에 16진수 두 개가 오는 형태로, 공백은 %20, 中의 UTF-8 바이트는 %E4%B8%AD가 됩니다. URL 인코딩은 임의의 텍스트를 URL 안에서 안전하게 흐르게 하는 기계적 번역입니다.
자주 뭉뚱그려지는 두 가지 구분된 작업이 있으며, 이 도구는 옵션 선택기를 통해 둘 다 드러냅니다.
- 구성 요소 모드 (JavaScript의
encodeURIComponent경로)는 문자·숫자 또는- _ . ! ~ * ' (중 하나가 아닌 모든 것 을 이스케이프합니다. 텍스트가 쿼리 매개변수·경로 세그먼트·프래그먼트에 넣으려는 단일 데이터 조각일 때 쓰세요. 그래야 구조적 의미를 가진 문자(/ ? & = #)가 무해한 리터럴 텍스트로 줄어듭니다. - 전체 모드 (
encodeURI경로)는 같은 안전하지 않은 바이트를 이스케이프하면서도 URL 자신의 구조적 문자(: / ? # [ ] @ ! $ & ' ( ) * + , ; =)는 의도적으로 그대로 둡니다. 이미 올바른 모양을 갖춘 완전한 URL에서 안의 리터럴 문자만 정리하고 싶을 때 쓰세요.
디코딩은 두 형태 모두 되돌립니다. 입력에 %GG(올바른 16진수가 아님)나 홀로 선 % 같은 malformed 이스케이프가 있으면, 도구는 추측하는 대신 오류를 드러내고 범인 위치를 가리킵니다.
사용 방법#
- 왼쪽 위의 토글에서 인코딩 또는 디코딩 을 고르세요.
- 옵션 에서 URL에 넣으려는 단일 값이면 구성 요소, 구조를 유지해야 하는 전체 URL이면 전체 를 고르세요.
- 왼쪽 입력 패널에 붙여넣으세요.
- 오른쪽 출력 패널에서 결과를 읽고 복사 를 누르세요.
- 예제 는 데모 문자열을 불러오고, 지우기 는 패널을 초기화합니다.
주요 기능#
- 하나가 아니라 두 가지 실제 범위. 구성 요소와 전체는
encodeURIComponent/encodeURI구분을 정확히 반영하여, 도구를 바꾸지 않고 단일 값을 이스케이프하거나 전체 URL을 정리할 수 있습니다. - 기본 UTF-8. non-ASCII 문자는 UTF-8 바이트 시퀀스로 인코딩됩니다(RFC 3986 이래의 표준).
中文은 단일 이스케이프된 Latin-1 덩어리가 아니라%E4%B8%AD%E6%96%87가 됩니다. - 오류가 위치를 가리킵니다. 디코딩이 잘못된
%이스케이프에 부딪히면, 상태 줄은 전체 입력을 버리는 대신 그 자리를 보고합니다. - 로컬 실행. 모든 것이 브라우저에서 일어나며, 붙여넣은 것은 아무것도 업로드되지 않습니다.
실전 예시#
a/b?c=d & e를 구성 요소 모드로 인코딩하면:
a%2Fb%3Fc%3Dd%20%26%20e
/는 %2F, ?는 %3F, =는 %3D, 공백은 %20, &는 %26이 됩니다. URL 구조로 읽힐 수 있는 문자가 모두 중화되었습니다. 전체 문자열을 하나의 쿼리 값에 끼워 넣는 올바른 형태입니다.
이제 전체 모드로 전환해 완전한 URL을 인코딩해 보세요.
https://example.com/path?q=hello world&lang=zh CN
결과는 프로토콜·슬래시·?·&를 그대로 유지하고 리터럴 공백만 이스케이프합니다.
https://example.com/path?q=hello%20world&lang=zh%20CN
이것이 두 모드의 차이를 한눈에 보여줍니다. 구성 요소는 모든 것을 데이터로 평면화하고, 전체는 URL 뼈대를 보존하며 정리가 필요한 바이트만 닦습니다.
FAQ#
구성 요소와 전체 중 어떻게 결정하나요?#
쿼리 문자열을 만드는 중이고 값 중 하나가 사용자 입력에서 왔다면, 그 값은 구성 요소 로 인코딩하세요. 이미 완전히 형성된 URL에 군더더기 문자(공백, 악센트)가 몇 개 있을 뿐이라면 전체를 전체 로 통과시키세요. 유용한 테스트: 출력이 여전히 링크로 동작하려면 ?, &, /가 필요한가? 그러면 전체를 쓰세요. 그 문자들이 실제로 데이터의 일부인가? 그러면 구성 요소를 쓰세요.
디코딩된 문자열에 %GG가 있는데 도구가 오류를 냅니다. 왜요?#
%는 항상 16진수 두 자리가 뒤따라야 합니다. %GG는 올바른 16진수가 아니어서 디코더는 이를 거부하고 위치를 보고합니다. 코드에서 URIError를 던질 같은 입력입니다. 원본이 %25(리터럴 %의 인코딩된 형태)를 보내도록 고치거나, malformed 이스케이프를 바로잡으세요.
쿼리 문자열을 조립하기 전에 인코딩해야 하나요, 후에요?#
각 값을 =와 &로 합치기 전에 인코딩하세요. 먼저 ?q=a & b를 조립하고 전체를 구성 요소 모드로 인코딩하면 =와 &까지 이스케이프되어 서버가 더 이상 구분자로 보지 않습니다. 조각을 인코딩한 뒤 조립하세요.
유니코드를 브라우저와 같은 방식으로 처리하나요?#
네. 최신 브라우저와 서버는 퍼센트 이스케이프가 UTF-8 바이트를 담는 것을 기대하며, 이 도구가 내보내는 것입니다. 中은 %E4%B8%AD가 됩니다. 레거시 단일 바이트 인코딩(Latin-1, GBK 등)을 기대하는 오래된 시스템을 디버깅 중이라면 바이트가 달라지며, 인코딩 전용 도구가 필요합니다.