본문 바로가기

URL 인코딩·디코딩

주소에 그대로 담을 수 없는 한글·공백·특수문자를 %XX 형태로 바꾸고, 반대로 되돌려 읽습니다.

로딩 중...

왜 만들었나요

검색 결과 주소를 복사했더니 한글이 %EB%B6%80%EB%8F%99%EC%82%B0 같은 문자열로 바뀌어 뭐가 뭔지 알 수 없던 적이 있으실 겁니다. 로그를 볼 때마다 그걸 손으로 풀기 번거로워서, 붙여넣으면 바로 양쪽으로 바뀌게 만들었습니다.

Note

입력한 주소나 텍스트는 서버로 전송되지 않습니다. URL 인코딩·디코딩은 변환을 전부 브라우저 안에서 처리해, 내부 주소나 토큰이 든 링크도 기기 밖으로 나가지 않습니다.


사용 방법

  1. URL 인코딩·디코딩 중 어느 방향인지 위쪽에서 고릅니다. 한글을 주소에 담을 때는 인코드, 암호처럼 보이는 문자열을 읽을 때는 디코드입니다. 탭을 바꾸면 입력창이 비워지니, 반대 방향으로 이어 돌리려면 결과를 복사해 다시 붙여넣으세요.

    URL 인코딩·디코딩의 인코드·디코드 방향 선택 탭

  2. 왼쪽 입력창에 주소나 텍스트를 붙여넣습니다. 샘플 버튼으로 시작해도 됩니다.

    입력창에 한글 검색어가 담긴 주소 https://example.com/search?q=안녕 세계&lang=ko&page=1을 붙여넣은 화면

  3. 입력하는 즉시 오른쪽에 결과가 나옵니다. 복사 버튼으로 가져가세요. 오른쪽 결과창은 읽기 전용이라 직접 고칠 수 없습니다 — 바꿀 내용은 왼쪽 입력창에서 고칩니다.

    한글이 %EC%95%88%EB%85%95처럼 퍼센트 기호로 인코딩된 결과와 복사 버튼

이렇게 나옵니다

한글이 든 검색 주소를 넣으면 이렇게 나옵니다.

인코드
  부동산 시세     →   %EB%B6%80%EB%8F%99%EC%82%B0%20%EC%8B%9C%EC%84%B8

디코드
  %EC%84%9C%EC%9A%B8   →   서울

샘플 버튼은 주소 한 줄을 통째로 넣습니다. 그때는 한글만 바뀌는 게 아니라 이렇게 나옵니다.

넣은 것
  https://example.com/search?q=안녕 세계&lang=ko&page=1

나온 것
  https%3A%2F%2Fexample.com%2Fsearch%3Fq%3D%EC%95%88%EB%85%95%20%EC%84%B8%EA%B3%84%26lang%3Dko%26page%3D1

https://:/, 그리고 ? & = 까지 모두 %3A %2F %3F %26 %3D 로 바뀝니다. 주소 구분 기호까지 함께 바꾸는 방식이라 그렇습니다. 영문·숫자와 -_.!~*'() 는 그대로 남습니다. 주소를 통째로 넣으면 링크로 쓸 수 없는 문자열이 되니, 아래 "전체 주소를 통째로 인코딩하면 안 됩니다"도 함께 보세요.

알아두면 좋은 것

왜 한글을 그대로 못 쓰나

인터넷 주소 규격이 만들어질 때는 영문자·숫자·일부 기호만 쓰도록 정해졌습니다. 한글이나 공백은 그 목록에 없어서, 그대로 넣으면 시스템마다 다르게 해석하거나 주소가 끊깁니다.

그래서 이런 글자를 % 뒤에 숫자 두 자리로 바꿔 표현합니다. 한글 한 글자는 보통 %XX 세 개로 바뀝니다.

자주 보는 변환

전부 외울 필요는 없지만, 아래 몇 개는 주소에서 워낙 자주 보여 눈에 익혀 두면 편합니다.

원래바뀐 모습
공백%20 (또는 +)
/%2F
?%3F
&%26
=%3D
#%23

이런 경우에는

디코드했는데 여전히 `%25`가 보여요

두 번 인코딩된 경우입니다. %가 다시 인코딩되면 %25가 되므로, %2520은 원래 공백이 두 번 변환된 것입니다. 디코드를 한 번 더 돌리면 풀립니다.

반대로 %ZZ 처럼 % 뒤 두 자리가 어긋난 값이나 홀로 남은 % 를 넣으면 결과창에 올바르지 않은 인코딩 형식입니다 안내가 뜹니다. 값이 중간에 잘려 붙여넣어졌는지 확인해 보세요.

공백이 `+`로 되어 있어요

주소 뒤 검색어 부분(? 뒤)에서는 공백을 +로 쓰는 방식이 오래전부터 함께 쓰였습니다. 둘 다 공백을 뜻하지만 위치에 따라 다르게 해석되니, 주소 경로에는 %20을 쓰는 게 안전합니다.

URL 인코딩이 필요한 순간

주소에 한글이나 공백이 섞이면 문제가 생기는 자리들이 있습니다. URL 인코더는 그럴 때 씁니다.

상황이유
한글이 든 주소를 메신저로 전달% 범벅이 된 주소를 읽을 수 있게
검색 결과 주소 공유검색어가 제대로 전달되도록
주소가 중간에 끊겨서 전달됨공백이나 특수문자가 원인인 경우가 많습니다
로그에 찍힌 주소 확인무슨 값이 넘어갔는지 풀어서 보기

전체 주소를 통째로 인코딩하면 안 됩니다

https://:/ 까지 바뀌어 주소가 아예 동작하지 않게 됩니다.

잘못된 예
https%3A%2F%2Fexample.com%2F검색   ← 링크로 안 먹힘

올바른 예
https://example.com/검색?q=%EC%82%AC%EA%B3%BC
                          ↑ 값 부분만 인코딩

바꿔야 하는 건 검색어나 이름처럼 값이 들어가는 부분입니다. 주소의 뼈대(https://, 도메인, /, ?, =)는 그대로 두세요.

이 도구로는 안 되는 것

  • 값 부분만 골라서 바꿔 주지 않습니다 — 주소 구분 기호까지 함께 바꾸므로, 주소라면 값에 해당하는 조각만 따로 넣어야 합니다
  • 주소를 조각내서 보려면 URL 파서가 편합니다
  • 주소가 실제로 열리는지 확인해 주지 않습니다 — 표기만 바꿉니다
  • 광고용 추적 주소를 만들려면 UTM 생성기
  • 한글 도메인은 퓨니코드 변환기가 맞습니다

용어 설명

퍼센트 인코딩

주소에 못 쓰는 글자를 % + 숫자 두 자리로 바꿔 적는 방식입니다. URL 인코딩이라고도 부르며, 주소·검색어·양식 전송 등 웹 곳곳에서 쓰입니다. URL 인코딩·디코딩은 이 규칙을 양쪽으로 오가는 일이고, 되돌리는 쪽을 보통 디코딩이라 부릅니다.

자주 묻는 질문

왜 한글이나 공백을 반드시 인코딩해야 하나요?

인터넷 표준 규약(RFC 3986)에 따르면 URL 주소에는 기본적으로 영문 알파벳, 숫자, 그리고 일부 제한된 기호(ASCII 문자셋)만 사용할 수 있도록 정의되어 있습니다. 한글, 이모지, 공백 등은 이 규칙에 포함되지 않기 때문에, 웹 브라우저와 서버가 이 문자들을 올바르게 인식하고 통신하기 위해서는 허용된 문자열의 조합(퍼센트 기호와 16진수 숫자)으로 변환하는 과정이 필수적입니다.

인코딩 결과에 보이는 % 기호와 숫자들은 무엇을 의미하나요?

이를 '퍼센트 인코딩(Percent-encoding)'이라고 부릅니다. % 기호 뒤에 붙는 두 자리 문자는 해당 원본 문자의 유니코드(UTF-8) 값을 16진수로 표현한 것입니다. 예를 들어 공백은 16진수로 20이기 때문에 '%20'으로 변환되며, 웹 서버는 이 '%20'을 전달받으면 다시 공백으로 해석하여 처리합니다.

공백이 %20이 아니라 + 기호로 변환되는 경우도 있던데 차이가 무엇인가요?

기본적인 웹 표준 URL 인코딩 규칙에서는 공백을 '%20'으로 변환하는 것이 맞습니다. 하지만 HTML 폼(Form) 데이터를 'application/x-www-form-urlencoded' 방식으로 서버에 제출할 때, 역사적인 이유로 공백이 덧셈 기호('+')로 변환되기도 합니다. 최신 웹 개발 환경과 API 통신에서는 혼란을 방지하기 위해 공백을 '%20'으로 통일하여 사용하는 것을 더욱 권장합니다.

주소 전체를 통째로 인코딩해도 되나요?

안 됩니다. https:// 의 콜론과 슬래시까지 바뀌어 버려서 주소가 아예 동작하지 않게 됩니다. 바꿔야 하는 것은 검색어나 이름처럼 값이 들어가는 부분이고, 주소의 뼈대(https://, 도메인, 슬래시, 물음표, 등호)는 그대로 두어야 합니다. 예를 들어 검색어만 인코딩한 https://example.com/검색?q=%EC%82%AC%EA%B3%BC 형태가 올바릅니다.

디코드했는데 여전히 %25가 보입니다.

두 번 인코딩된 경우입니다. 퍼센트 기호 자체가 다시 인코딩되면 %25가 되므로, %2520은 원래 공백(%20)이 한 번 더 변환된 것입니다. 이럴 때는 디코드를 한 번 더 실행하면 됩니다. 시스템을 여러 단계 거치면서 각 단계가 인코딩을 한 번씩 더 걸 때 흔히 생기므로, %가 사라지고 읽을 수 있는 글자가 나올 때까지 반복하세요.

마지막 업데이트: