홈 / 텍스트 / URL 인코딩·디코딩

URL 인코딩·디코딩

URL 인코딩·디코딩을 무료로 변환하세요. 전체 인코딩(encodeURI)과 컴포넌트 인코딩(encodeURIComponent) 차이, 한글 퍼센트 인코딩, 줄 단위 일괄처리까지 브라우저에서 바로 처리됩니다. 회원가입 없이, 서버 전송 없이 안전하게.

4가지 변환 방식예약문자표 안내EUC-KR 변환 복사줄 단위 일괄처리

다음 계산

이어서 많이 찾는 계산

이용 방법

방식을 선택하세요

전체 인코딩, 전체 디코딩, 컴포넌트 인코딩, 컴포넌트 디코딩 중 하나를 고르세요.

문자열을 입력하세요

URL이나 쿼리 값을 입력하면 결과가 즉시 표시됩니다.

결과를 복사하세요

'결과 복사하기' 버튼으로 복사하세요. 여러 줄은 일괄처리 탭을 사용하세요.

예약문자·EUC-KR 확인

인코딩이 필요한 예약문자는 아래 표에서 확인하고, EUC-KR 결과가 필요하면 변환·복사하세요.

핵심 답변

URL 인코딩은 URL에 쓸 수 없는 문자(한글·공백·특수문자)를 %와 16진수로 바꾸는 방식입니다. 전체 URL에는 encodeURI를, 쿼리 파라미터 값처럼 URL의 한 부분에는 encodeURIComponent를 사용합니다.

마지막 업데이트: 2026년 9월 17일
encodeURI vs encodeURIComponent 인코딩 대상 비교
문자encodeURIencodeURIComponent
한글·공백·이모지인코딩 (%ED%95%9C…)인코딩 (%ED%95%9C…)
; / ? : @ & = + $ , #그대로 둠 (URL 구조 문자)인코딩 (%3B %2F %3F …)
- _ . ~그대로 둠그대로 둠
! ' ( ) *그대로 둠그대로 둠
언제 사용URL 전체를 변환할 때쿼리 파라미터 값 등 URL의 일부를 변환할 때
한글 인코딩 예시 (UTF-8 바이트 → % 인코딩)
입력encodeURIComponent 결과비고
한%ED%95%9CUTF-8 3바이트
글%EA%B8%80UTF-8 3바이트
공백%201바이트
?%3F (컴포넌트) / ? (전체)모드에 따라 다름
&%26 (컴포넌트) / & (전체)모드에 따라 다름

심화 가이드

encodeURI와 encodeURIComponent, 뭐가 다른가요?

encodeURI는 URL "전체"를 위한 함수라서 : / ? # & = 같은 URL 구조 문자는 건드리지 않습니다. 반면 encodeURIComponent는 URL의 "한 조각(컴포넌트)"을 위한 함수라서 구조 문자까지 전부 % 인코딩합니다. 예를 들어 검색어 "날씨&미세먼지"를 쿼리 파라미터에 넣을 때는 encodeURIComponent로 %EB%82%A0%EC%94%A8%26%EB%AF%B8%EC%84%B8%EB%A8%BC%EC%A7%80 로 바꿔야 &가 파라미터 구분자로 오해받지 않습니다. 반대로 https://example.com/검색어 같은 전체 URL을 encodeURIComponent로 감싸면 ://와 /까지 망가져서 링크가 깨집니다. 헷갈리면 이렇게 기억하세요: 전체 URL → encodeURI, 파라미터 값 하나 → encodeURIComponent.

한글이 %ED%95%9C처럼 보이는 이유

한글은 URL에 직접 쓸 수 없어서 UTF-8 바이트로 나눈 뒤 각 바이트를 %XX 형태로 바꿉니다. "한"은 UTF-8에서 ED 95 9C 3바이트이므로 %ED%95%9C이 됩니다. 브라우저 주소창에서는 자동으로 한글로 보여주지만, 실제 전송되는 값은 인코딩된 형태입니다. 예전 escape() 함수는 한글을 %uD55C 같은 비표준 형태로 바꿔서 서버가 해석하지 못하니 사용하지 마세요.

이중 인코딩 주의: %가 %25로 바뀌었다면

이미 인코딩된 문자열을 한 번 더 인코딩하면 % 자체가 %25로 바뀌는 이중 인코딩이 발생합니다(예: %ED%95%9C → %25ED%2595%259C). 서버에서 한글이 깨져 보인다면 이중 인코딩을 의심해 보세요. 해결법은 간단합니다: 디코딩을 한 번 해서 원래 문자열로 되돌린 뒤, 필요한 횟수만큼만 다시 인코딩하세요. 이 도구의 디코딩 탭에서 %25ED%2595%259C를 붙여넣으면 단계를 확인할 수 있습니다.

Base64 인코딩과 헷갈리시나요?

URL 인코딩은 URL에 못 쓰는 문자를 % 형태로 바꾸는 것이고, Base64 인코딩·디코딩은 이진 데이터를 ASCII 문자로 바꾸는 것입니다. URL에 Base64 문자열을 넣을 때는 + / = 문자가 문제를 일으킬 수 있어서 URL-safe(Base64URL) 변환이 필요합니다. 두 도구를 함께 쓰면 토큰·이미지 데이터를 URL에 안전하게 실어 보낼 수 있습니다.

실무에서 바로 쓰는 인코딩 체크리스트

URL 인코딩이 필요한 순간은 생각보다 자주 찾아옵니다. 검색어처럼 한글을 쿼리 파라미터에 넣을 때는 값을 encodeURIComponent로 감싸야 하고, 전체 URL을 그대로 전달할 때는 encodeURI를 씁니다. 둘을 헷갈리면 &나 = 같은 예약 문자가 깨져 서버가 파라미터를 잘못 해석합니다. 파일 다운로드 링크에 한글 파일명이 들어갈 때도 인코딩이 필요하며, 이때는 서버의 헤더 처리까지 함께 고려해야 합니다. API를 호출할 때는 공백이나 특수문자가 포함된 값을 빠짐없이 인코딩했는지 확인하세요. 이미 인코딩된 값을 한 번 더 감싸면 %가 %25로 바뀌는 이중 인코딩이 되니, 디코딩 후 재인코딩하는 습관이 안전합니다. 인코딩과 헷갈리기 쉬운 Base64는 URL이 아니라 데이터를 문자화하는 용도이니 구분해서 쓰세요. 관련 개념은 Base64 인코딩·디코딩에서 확인할 수 있습니다.

URL 인코딩은 UTF-8 기준으로 동작합니다. 모든 변환은 브라우저 안에서 처리되며, 입력한 문자열이 서버로 전송되거나 저장되지 않습니다. 디코딩할 때 % 뒤에 16진수 2자리가 오지 않는 잘못된 형식은 오류로 표시됩니다.

자주 묻는 질문

URL 인코딩이란 무엇인가요?
URL에 직접 사용할 수 없는 문자(한글·공백·특수문자)를 %와 16진수 조합으로 바꾸는 방식입니다. 퍼센트 인코딩이라고도 합니다. 예를 들어 "한글"은 %ED%95%9C%EA%B8%80로 바뀝니다. 브라우저가 URL을 서버에 전송할 때 자동으로 처리하지만, 개발·SEO 작업에서는 직접 변환할 일이 자주 있습니다.
encodeURI와 encodeURIComponent의 차이는 무엇인가요?
encodeURI는 URL 전체를 인코딩하며 : / ? # & = 같은 구조 문자는 그대로 둡니다. encodeURIComponent는 URL의 일부(컴포넌트)를 인코딩하며 구조 문자까지 모두 변환합니다. 전체 URL 변환에는 encodeURI를, 쿼리 파라미터 값처럼 URL 조각에는 encodeURIComponent를 사용하세요.
쿼리 파라미터 값을 인코딩할 때는 어떤 걸 써야 하나요?
encodeURIComponent를 사용하세요. 파라미터 값에 들어간 &나 =가 구분자로 오해받지 않도록 %26, %3D로 바꿔야 합니다. encodeURI를 쓰면 &가 그대로 남아서 파라미터가 둘로 쪼개지는 버그가 생깁니다.
한글이 %ED%95%9C처럼 표시되는 이유는 무엇인가요?
한글은 UTF-8에서 1글자당 3바이트를 차지하고, 각 바이트가 %XX 형태로 인코딩되기 때문입니다. "한"은 ED 95 9C 3바이트라서 %ED%95%9C이 됩니다. 정상적인 인코딩이니 걱정하지 마세요.
디코딩했는데 오류가 납니다. 왜 그런가요?
% 뒤에 16진수 2자리가 오지 않는 잘못된 형식(예: %ZZ, %E 단독)이거나, 이중 인코딩된 문자열(%25ED…)일 가능성이 큽니다. 입력 끝부분의 %를 먼저 확인하고, %25가 보인다면 한 번 디코딩한 뒤 다시 시도해 보세요.
이중 인코딩이란 무엇인가요?
이미 인코딩된 문자열을 또 인코딩해서 %가 %25로 바뀌는 현상입니다. 서버에서 한글이 %ED… 형태 그대로 보이거나 깨진다면 이중 인코딩을 의심해 보세요. 디코딩으로 원래 문자열을 복원한 뒤 필요한 만큼만 다시 인코딩하면 해결됩니다.
escape() 함수와는 무엇이 다른가요?
escape()는 구형 비표준 함수로 한글을 %uD55C 같은 형태로 바꿔서 서버가 해석하지 못합니다. 지금은 encodeURI/encodeURIComponent를 사용하는 것이 표준이며, 이 도구도 표준 방식만 제공합니다.
공백은 %20과 + 중 무엇을 써야 하나요?
URL 경로에서는 %20을, form 전송 방식에서는 +를 쓰는 것이 관례입니다. 요즘은 대부분 %20으로 통일해도 문제없지만, 서버가 +를 공백으로 해석하지 않는 경우도 있으니 API 문서를 확인하는 것이 안전합니다.
한글 도메인은 어떻게 처리하나요?
한글 도메인은 실제로 퓨니코드(punycode)라는 ASCII 형태로 변환되어 동작합니다. 브라우저 주소창에는 한글로 보이지만 내부적으로는 xn--로 시작하는 형태로 바뀝니다. 링크를 공유할 때는 브라우저에 표시되는 한글 주소를 그대로 복사해도 됩니다.
인코딩된 링크를 메신저로 보내면 깨져요
메신저 앱이 긴 URL을 잘라내거나 % 문자를 변형하면서 링크가 깨지는 경우가 있습니다. 이럴 때는 URL을 먼저 디코딩해 정상 형태인지 확인하고, 그래도 안 되면 URL 단축 서비스를 이용해 짧게 줄여서 보내는 것이 좋습니다.
POST로 보내면 인코딩이 필요 없나요?
POST로 데이터를 보내도 URL에 포함되는 부분은 인코딩이 필요합니다. 쿼리 스트링에 한글을 붙여 POST 요청을 보내면 마찬가지로 깨질 수 있습니다. 다만 요청 본문에 담는 데이터는 Content-Type에 따라 브라우저가 알아서 처리하므로 직접 인코딩할 필요가 없습니다. 헷갈린다면 URL에 들어가는 값은 항상 인코딩한다는 원칙을 기억하세요.