URL 인코딩 디코딩 — 한글 주소·퍼센트 인코딩 변환기
한글·이모지까지 되는 URL 퍼센트 인코더와 디코더
브라우저에서 처리 · 서버로 전송되지 않음
소개
URL에는 알파벳, 숫자, 몇 가지 기호만 그대로 쓸 수 있습니다. 한글이나 공백, 이모지는 UTF-8 바이트로 바꾼 뒤 각 바이트를 % 와 16진수 두 자리로 적어야 하는데, 이를 퍼센트 인코딩이라고 합니다. 이 도구는 입력하는 즉시 인코딩과 디코딩 결과를 보여 줍니다.
사용법
- 동작에서 인코딩 또는 디코딩을 고릅니다.
- 범위를 고릅니다. 쿼리 값 하나는 encodeURIComponent, 주소 전체는 encodeURI를 선택하세요.
- 입력 칸에 텍스트나 주소를 붙여 넣으면 결과가 바로 나타납니다.
- 폼 데이터를 디코딩한다면 + 를 공백으로 옵션을 켭니다.
- 복사 버튼으로 결과를 가져가거나, 결과를 입력으로 버튼으로 되돌려 확인합니다.
기준
- 브라우저 표준 함수
encodeURIComponent,encodeURI,decodeURIComponent,decodeURI를 그대로 사용하며, 규칙은 RFC 3986을 따릅니다. - 문자는 먼저 UTF-8 바이트가 됩니다. 한글 한 글자는 3바이트라
%XX가 세 번, 이모지는 4바이트라 네 번 나옵니다. - 인코딩하지 않는 문자는
A-Z a-z 0-9 - _ . ! ~ * ' ( )입니다. encodeURI는 여기에; , / ? : @ & = + $ #도 그대로 둡니다. - 짝이 맞지 않는 서로게이트 문자는 인코딩할 수 없어 오류로 알려 줍니다.
- 디코딩 실패 시 임의로 고치지 않고 오류 메시지만 보여 줍니다.
예시
| 입력 | 방식 | 결과 |
|---|---|---|
a b&c=d |
컴포넌트 | a%20b%26c%3Dd |
안녕하세요 |
컴포넌트 | %EC%95%88%EB%85%95%ED%95%98%EC%84%B8%EC%9A%94 |
👍 |
컴포넌트 | %F0%9F%91%8D |
https://example.com/검색?q=a b |
전체 주소 | https://example.com/%EA%B2%80%EC%83%89?q=a%20b |
자주 하는 실수
- 주소 전체에 encodeURIComponent를 쓰면
https://의:와/까지 바뀌어 주소가 깨집니다. 전체 주소는 encodeURI를 쓰세요. - 이미 인코딩된 문자열을 한 번 더 인코딩하면
%가%25로 바뀌어 이중 인코딩이 됩니다. 결과가 이상하면 먼저 디코딩해 보세요. - 쿼리 값에
&나=가 들어갈 가능성이 있으면 반드시 값 부분만 컴포넌트 방식으로 인코딩해야 합니다.
자주 묻는 질문
encodeURIComponent와 encodeURI는 무엇이 다른가요?
encodeURIComponent는 쿼리 값 하나처럼 조각을 인코딩할 때 쓰며 / ? & = # 같은 구분 문자까지 모두 바꿉니다. encodeURI는 주소 전체를 인코딩할 때 쓰며 이런 구분 문자는 그대로 둡니다.
디코딩하면 오류가 나요.
% 뒤에 16진수 두 자리가 오지 않았거나, 이어진 바이트가 올바른 UTF-8이 아닐 때 오류가 납니다. 주소를 중간에서 잘라 복사했는지, % 문자가 그냥 글자로 들어 있지 않은지 확인하세요.
공백이 %20으로도 +로도 보이는데 어느 쪽이 맞나요?
주소 경로에서는 %20이 표준입니다. +는 HTML 폼 제출 방식(application/x-www-form-urlencoded)에서만 공백을 뜻해요. 그런 데이터를 디코딩할 때는 + 를 공백으로 옵션을 켜세요.
입력한 주소가 서버로 전송되나요?
아니요. 변환은 모두 브라우저 안에서 이루어집니다.