URL 인코더·디코더

한글이 포함된 URL을 퍼센트 인코딩(%EC%..)으로 변환하거나 다시 읽을 수 있는 문자로 디코딩하는 무료 URL 인코더·디코더.

두 가지 인코딩의 차이

이럴 때 필요합니다

주소창에서 복사한 링크가 %EC%95%88%EB%85%95처럼 보일 때 디코딩하면 원래 한글이 보입니다. 반대로 API 요청이나 링크 파라미터에 한글을 넣어야 할 때 인코딩합니다. 카카오톡·엑셀에서 링크가 중간에 끊긴다면 공백·특수문자를 인코딩하지 않아서인 경우가 많습니다.

디코딩 시 +는 공백으로 처리합니다(폼 전송 방식 호환).

퍼센트 인코딩이 왜 필요한가

URL에는 영문·숫자와 일부 기호(-_.~)만 안전하게 쓸 수 있습니다. 한글·공백·특수문자는 바이트 단위로 쪼갠 뒤 % + 16진수 두 자리로 바꿔야 서버가 제대로 알아듣습니다.

한글 한 글자는 UTF-8에서 3바이트라 %XX%XX%XX 아홉 글자가 됩니다. "한" → %ED%95%9C. 한글이 섞인 주소를 복사하면 유난히 길어지는 이유입니다.

공백은 %20 일까 + 일까

둘 다 쓰이지만 위치에 따라 다릅니다.

헷갈린다면 %20을 쓰는 쪽이 항상 안전합니다. 모든 위치에서 공백으로 해석됩니다.

encodeURI 와 encodeURIComponent

자바스크립트에는 두 함수가 있고 잘못 고르면 링크가 깨집니다.

검색어처럼 &가 들어갈 수 있는 값에 encodeURI를 쓰면 그 &가 파라미터 구분자로 오해돼 값이 잘립니다. 파라미터 값에는 encodeURIComponent가 원칙입니다.

# 뒤는 서버에 전달되지 않습니다

URL에서 # 이후(프래그먼트)는 브라우저 안에서만 쓰이고 서버로 가지 않습니다. 값 안에 #가 들어가야 한다면 반드시 %23으로 인코딩해야 합니다. +도 %2B로 바꾸지 않으면 공백으로 바뀔 수 있고, &는 %26으로 써야 파라미터가 끊기지 않습니다.

자주 묻는 질문

전체 인코딩과 URL 인코딩은 뭐가 다른가요?
전체 인코딩은 슬래시·물음표·앰퍼샌드 같은 구분 문자까지 전부 변환해 쿼리 값 하나를 넣을 때 쓰고, URL 인코딩은 구분 문자를 남겨 URL 전체를 안전하게 만들 때 씁니다.
%EC%95%88%EB%85%95 이건 뭔가요?
한글을 퍼센트 인코딩한 것입니다. 디코딩 버튼을 누르면 원래 한글로 복원됩니다.
링크가 중간에 끊기는 이유는?
공백이나 특수문자를 인코딩하지 않아서인 경우가 많습니다. 인코딩하면 카카오톡·엑셀에서도 링크가 온전히 유지됩니다.
한글 한 글자는 왜 %XX가 세 개인가요?
한글 한 글자가 UTF-8에서 3바이트이기 때문입니다. 바이트마다 %와 16진수 두 자리로 바뀌므로 아홉 글자가 됩니다. "한"은 %ED%95%9C 입니다.
공백은 %20 과 + 중 무엇을 써야 하나요?
%20 을 쓰는 것이 항상 안전합니다. + 는 폼 전송 방식의 쿼리스트링에서만 공백으로 해석되고, 경로(path)에서는 그냥 더하기 기호로 읽힙니다.
encodeURI 와 encodeURIComponent 차이는?
encodeURIComponent 는 / ? & = # 까지 모두 변환합니다. 파라미터 값 하나를 인코딩할 때는 encodeURIComponent, 주소 전체를 정리할 때는 encodeURI 를 씁니다.