URL 인코딩

Coding 부호
URL 입력
0 chars

무료 온라인 URL 인코딩/디코딩 도구. encodeURIComponent / encodeURI / RFC 3986 네 가지 인코딩 모드를 지원합니다. 이스케이프된 문자를 실시간으로 하이라이트 표시하며, 배치 모드는 여러 줄 처리를 지원하고, Query Only는 매개변수 값만 인코딩합니다. 브라우저 로컬 처리로 데이터는 업로드되지 않습니다.

관련 추천

URL 인코딩이란 무엇인가요?

URL 인코딩(퍼센트 인코딩)은 URL의 비안전 문자를 %XX 형식으로 변환하는 과정입니다. URL에는 ASCII 문자의 일부(영문자, 숫자, -_.~)만 포함할 수 있으며 다른 모든 문자(중국어, 공백, 특수 기호 포함)는 URL에서 전송하기 전에 인코딩해야 합니다. 예를 들어 공백은 %20, 중국어 '中'은 %E4%B8%AD으로 인코딩됩니다.

**encodeURIComponent vs encodeURI**: 가장 많이 사용되는 두 가지 인코딩 함수입니다. encodeURIComponent는 &, =, ? 등 매개변수 구분자를 포함하여 가장 철저하게 인코딩하므로 개별 매개변수 값 인코딩에 적합합니다. encodeURI는 URL 구조(프로토콜://, 경로, /, ?, #)를 보존하므로 전체 URL 인코딩에 적합합니다. 혼용하면 매개변수 파싱 오류가 발생할 수 있습니다.

**RFC 3986 vs 구 표준**: RFC 3986은 물결표 ~를 안전한 문자로 취급하여 인코딩하지 않지만 초기 표준에서는 %7E로 인코딩됩니다. RFC 3986을 사용하면 불필요한 이스케이프가 줄어들어 URL 가독성이 향상되고 일부 서버의 %7E 파싱 문제도 피할 수 있습니다.

**Query Only 모드**: URL의 쿼리 매개변수 값만 인코딩하고 키 이름, 등호, & 기호에 영향을 주고 싶지 않을 때 사용합니다. 예를 들어 ?name=장삼은 ?name=%E5%BC%A0%E4%B8%89으로 인코딩되어 키 이름은 읽기 쉬운 상태로 유지되고 값만 인코딩됩니다.

**인코딩 하이라이트**: %XX 형식의 문자를 실시간으로 호박색으로 하이라이트 표시하여 어떤 문자가 인코딩되었는지 한눈에 알 수 있습니다. 이를 통해 인코딩 규칙을 이해하기 쉬워집니다: 영문자와 숫자는 보통 안전한 문자이므로 인코딩되지 않고 중국어와 특수 기호만 인코딩됩니다. 모든 계산은 브라우저 로컬에서 수행되며 데이터는 업로드되지 않습니다.

사용 사례

  • API 매개변수 디버깅: encodeURIComponent와 encodeURI 출력 차이를 비교하여 인터페이스 서명 불일치 문제 해결
  • 로그 디코딩: 로그의 URL 인코딩 내용을 일괄 디코딩하여 가독성 있는 텍스트로 복원
  • URL 구성: Query Only 모드로 키 이름은 유지하고 값만 인코딩하여 수동 조합으로 인한 형식 오류 방지
  • 프론트엔드 개발: 인코딩 하이라이트로 어떤 문자가 이스케이프되는지 이해하기 쉬워 페이지 이동 및 리디렉션 디버깅에 도움
  • 데이터 마이그레이션: 레거시 시스템에서 내보낸 URL 인코딩 데이터를 일괄 처리하여 새 형식으로 변환

이용 방법

  1. 인코딩/디코딩할 URL 또는 텍스트를 입력하거나 붙여넣기
  2. 인코딩 방향(인코딩/디코딩)과 인코딩 모드(Component / URI / full / RFC 3986) 선택
  3. 여러 줄 데이터를 처리하려면 배치 모드를 활성화하고, 매개변수 값만 인코딩하려면 Query Only를 활성화
  4. 하이라이트된 결과를 확인하고 인코딩된 문자열을 복사하여 API 요청이나 URL 구성에 사용

주요 기능

  • 네 가지 인코딩 모드: encodeURIComponent / encodeURI / full / RFC 3986 원클릭 전환, 각 규칙의 출력 차이를 실시간으로 비교
  • 인코딩 하이라이트: 이스케이프된 %XX 문자를 실시간으로 하이라이트 표시, 호박색 마크로 인코딩 결과를 한눈에 파악
  • 배치 모드: 여러 줄 일괄 인코딩/디코딩 지원, 각 줄을 독립적으로 처리. 로그나 일괄 데이터 처리에 적합
  • Query Only 모드: URL 매개변수 값 부분(등호 뒤 내용)만 인코딩하고 키 이름, 기호, 경로 구조는 그대로 유지
  • 실시간 디바운스: 300ms 자동 인코딩/디코딩, 버튼 클릭 필요 없이 입력하면 즉시 결과 표시
  • 문자 수 카운트: 입력 문자 수를 실시간으로 표시, API 매개변수 길이 제한 확인에 편리

코드 예제

JavaScript에서의 URL 인코딩/디코딩

// encodeURIComponent: 개별 매개변수 값 인코딩 (가장 일반적)
const param = encodeURIComponent('장삼&리스');
console.log(param); // %E5%BC%A0%E4%B8%89%26%E6%9D%8E%E5%9B%9B

// encodeURI: 전체 URL 인코딩 (:/?#&= 등 구조 문자 보존)
const url = encodeURI('https://example.com/search?q=안녕하세요 세계');
console.log(url);

// 디코딩
const decoded = decodeURIComponent(param);
console.log(decoded); // 장삼&리스

// RFC 3986 호환 (~ 인코딩 안 함)
function rfc3986Encode(str) {
  return encodeURIComponent(str).replace(/[!'()*]/g, c => '%' + c.charCodeAt(0).toString(16).toUpperCase());
}

// URLSearchParams API (현대적인 방식, 자동 인코딩 처리)
const params = new URLSearchParams({ name: '장삼', city: '북경' });
console.log(params.toString());
// name=%E5%BC%A0%E4%B8%89&city=%E5%8C%97%E4%BA%AC

Python에서의 URL 인코딩/디코딩

from urllib.parse import quote, unquote, urlencode, quote_plus

# quote: encodeURIComponent와 유사
encoded = quote('장삼&리스')
print(encoded)  # %E5%BC%A0%E4%B8%89%26%E6%9D%8E%E5%9B%9B

# RFC 3986 모드 (~ 인코딩 안 함, 기본값)
print(quote('hello~world'))  # hello~world

# quote_plus: 공백을 +로 인코딩 (폼 형식)
print(quote_plus('hello world'))  # hello+world

# 디코딩
print(unquote(encoded))  # 장삼&리스

# urlencode: 쿼리 문자열 구성
params = urlencode({'name': '장삼', 'city': '북경'})
print(params)
# name=%E5%BC%A0%E4%B8%89&city=%E5%8C%97%E4%BA%AC

Java에서의 URL 인코딩/디코딩

import java.net.URLEncoder;
import java.net.URLDecoder;
import java.net.URI;
import java.nio.charset.StandardCharsets;

public class URLEncodeExample {
    public static void main(String[] args) throws Exception {
        // URL 인코딩 (URLEncoder는 폼 형식, 공백은 +가 됨)
        String encoded = URLEncoder.encode("장삼&리스", "UTF-8");
        System.out.println(encoded);
        // %E5%BC%A0%E4%B8%89%26%E6%9D%8E%E5%9B%9B

        // 디코딩
        String decoded = URLDecoder.decode(encoded, "UTF-8");
        System.out.println(decoded); // 장삼&리스

        // 전체 URL 구성 (URI 클래스가 자동으로 인코딩 처리)
        URI uri = new URI("https", "example.com", "/search", "q=안녕하세요", null);
        System.out.println(uri.toASCIIString());
    }
}

자주 묻는 질문

encodeURIComponent와 encodeURI의 차이점은 무엇인가요?

encodeURIComponent는 &, =, ? 등을 포함한 모든 비안전 문자를 인코딩하므로 개별 매개변수 값 인코딩에 적합합니다. encodeURI는 URL 구조 문자(:、/、?、# 등)를 보존하므로 전체 URL 인코딩에 적합합니다. 사용场景: 매개변수 값에는 Component를, 전체 URL에는 URI를 사용하세요.

RFC 3986과 표준 인코딩의 차이점은 무엇인가요?

RFC 3986은 URL 표준의 개정판으로 물결표 ~를 인코딩이 필요 없는 안전한 문자로 취급합니다. 구 표준에서는 %7E로 인코딩됩니다. RFC 3986을 사용하면 일부 서버 측의 파싱 차이를 피할 수 있어 호환성이 더 좋습니다.

Query Only 모드는 어떤场景에서 사용하나요?

URL 쿼리 문자열 ?name=장삼&city=북경과 같은 경우, 키 이름과 기호에 영향을 주지 않고 매개변수 값만 인코딩하고 싶을 때 사용합니다. 이때 name과 city는 그대로 유지되고 값은 %E5%BC%A0%E4%B8%89과 %E5%8C%97%E4%BA%AC으로 인코딩됩니다.

공백 인코딩은 +와 %20 중 무엇을 사용해야 하나요?

application/x-www-form-urlencoded 형식(HTML 폼 제출)에서는 공백이 +로 인코딩됩니다. 하지만 URL 경로와 encodeURIComponent에서는 공백이 항상 %20으로 인코딩됩니다. 이 도구는 기본적으로 %20 형식을 사용합니다.

같은 중국어 문자인데 도구에 따라 인코딩 결과가 다른 이유는 무엇인가요?

이것은 문자 인코딩 방식에 따라 다릅니다. 이 도구는 UTF-8 인코딩(웹 표준)을 사용하며, 중국어 '中'은 %E4%B8%AD으로 인코딩됩니다. 다른 도구가 GBK 인코딩을 사용하는 경우 결과는 %D6%D0이 됩니다. 웹 URL에서는 항상 UTF-8 사용을 권장합니다.

인코딩 하이라이트는 어떤 용도인가요?

%XX 형식으로 인코딩된 문자(예: 공백→%20)를 하이라이트 표시하여 인코딩 규칙 이해와 문제 트러블슈팅에 도움을 줍니다. 영문자와 숫자는 안전한 문자이므로 인코딩되지 않고, 중국어와 특수 기호만 인코딩됩니다.

% 자체도 인코딩해야 하나요?

네. %는 URL 인코딩의 이스케이프 시작 문자입니다. 매개변수 값에 리터럴 %가 포함된 경우 %25로 인코딩해야 합니다. 그렇지 않으면 인코딩된 바이트로 잘못 해석되어 파싱 오류가 발생할 수 있습니다. 예를 들어 100%는 100%25로 인코딩해야 합니다.

용어집

퍼센트 인코딩(Percent-encoding)
URL 인코딩의 정식 명칭. % 뒤에 두 자리 16진수로 문자를 표현하는 인코딩 방식입니다. 예를 들어 공백은 %20, 중국어 '中'은 %E4%B8%AD으로 인코딩됩니다.Wikipedia - 퍼센트 인코딩
encodeURIComponent
JavaScript 내장 함수. A-Z a-z 0-9 - _ . ! ~ * ' ( ) 외의 모든 문자를 인코딩합니다. URL 쿼리 매개변수의 개별 값을 인코딩할 때 가장 많이 사용됩니다.
encodeURI
JavaScript 내장 함수. URL 구조 문자(: / ? # [ ] @ ! $ & ' ( ) * + , ; =)를 보존하고 정말 인코딩이 필요한 문자만 인코딩합니다. 전체 URL을 인코딩할 때 사용합니다.
RFC 3986
URI 일반 구문에 관한 최신 IETF 표준(2005년). URL 인코딩 규칙을 정의하고 있으며 물결표 ~를 비예약 문자(인코딩 불필요)로 분류합니다. 구 RFC 2396과 RFC 1738을 대체합니다.RFC 3986
예약 문자(Reserved Characters)
URL에서 특별한 의미를 가지는 문자(: / ? # [ ] @ ! $ & ' ( ) * + , ; = 등). 이러한 문자는 데이터로 사용할 때는 인코딩해야 하지만 구조적 위치에서는 인코딩해서는 안 됩니다.
비예약 문자(Unreserved Characters)
URL의 어떤 위치에서도 인코딩 없이 사용할 수 있는 안전한 문자. A-Z, a-z, 0-9, -, _, ., ~(RFC 3986 기준)가 포함됩니다.
쿼리 문자열(Query String)
URL의 ? 뒤 부분으로 key=value 쌍으로 구성되며 &로 구분됩니다. 예를 들어 ?name=장삼&age=20에서 name=장삼과 age=20이 두 개의 매개변수입니다.
URLSearchParams
최신 브라우저가 제공하는 API. URL 쿼리 문자열을 쉽게 구성하고 파싱할 수 있으며 인코딩과 디코딩을 자동으로 처리합니다. 수동으로 문자열을 조합하는 것보다 안전하고 신뢰할 수 있습니다.
application/x-www-form-urlencoded
HTML 폼의 기본 제출 형식. 공백이 %20이 아닌 +로 인코딩되는 점이 encodeURIComponent와 다릅니다. 서버 사이드 프레임워크는 보통 두 형식을 모두 자동으로 처리합니다.
UTF-8 인코딩
웹 표준 문자 인코딩. URL 인코딩에서는 비ASCII 문자(중국어, 이모지 등)를 먼저 UTF-8 바이트 시퀀스로 변환한 다음 각 바이트를 %XX 형식으로 인코딩합니다.

네 가지 인코딩 모드 문자 이스케이프 비교

문자의미encodeURIComponentencodeURIRFC 3986
공백공백%20%20%20
!느낌표%21!%21
#프래그먼트 식별자%23#%23
$달러 기호%24$%24
&매개변수 구분자%26&%26
'작은따옴표%27'%27
(왼쪽 괄호%28(%28
)오른쪽 괄호%29)%29
*별표%2A*%2A
+더하기 기호%2B+%2B
,쉼표%2C,%2C
/경로 구분자%2F/%2F
:콜론%3A:%3A
;세미콜론%3B;%3B
=등호%3D=%3D
?쿼리 문자열%3F?%3F
@골뱅이%40@%40
~물결표%7E%7E~

자주 사용되는 URL 예약 문자 퀵 레퍼런스

인코딩 후원본 문자URL에서의 용도
%20(공백)공백
%21!하위 구분자
%23#프래그먼트 식별자(해시)
%25%이스케이프 문자 자체
%26&쿼리 매개변수 구분자
%2B+더하기 기호/폼 공백
%2F/경로 구분자
%3A:스킴 구분자
%3D=키-값 구분자
%3F?쿼리 문자열 시작
%40@인증/이메일 구분자
%5B[배열 매개변수 (RFC 3986)

Authoritative References