Base64와 URL 인코딩: 한글 깨짐·이중 인코딩을 구분하는 방법
먼저 알아둘 내용
Base64는 바이트를 문자로 표현하는 방식이고, URL 인코딩은 URL 안에서 특별한 의미를 가진 문자를 안전하게 표현하는 방식입니다. 인코딩이 된 문자열을 다시 인코딩하면 원래 기대한 값과 달라집니다.
적용 범위Tooliv의 표준 Base64 텍스트 변환과 encodeURIComponent 기반 URL 변환을 설명합니다. 임의의 바이너리 파일 복원이나 Base64url 전용 처리는 포함하지 않습니다.
바로 적용하기
이 글의 목차 4
어느 도구에 넣어야 할까
API가 “Base64 문자열”을 요구한다면 먼저 원본이 텍스트인지 파일의 바이트인지 확인하세요. Tooliv Base64 도구는 UTF-8 텍스트를 인코딩하거나 그 텍스트를 되돌리는 용도입니다. 이미지의 바이너리 Base64를 붙여 넣으면 사람이 읽는 텍스트로 복원되지 않거나 오류가 날 수 있습니다.
URL의 검색어·이름·쿼리 값에 &, =, 한글 등이 들어 있다면 URL 인코딩을 사용합니다. encodeURIComponent는 URL 구성요소를 위한 함수입니다. 주소 전체를 넣으면 https://의 구분자까지 변환되므로, 완성된 주소를 그대로 유지하고 싶을 때는 맞지 않습니다.
입력과 출력을 직접 비교하기
다음은 UTF-8 변환과 해당 JavaScript 연산으로 직접 확인한 예시입니다.
| 작업 | 입력 | 출력 |
|---|---|---|
| Base64 인코딩 | 안녕 | 7JWI64WV |
| URL 구성요소 인코딩 | a&b=1 | a%26b%3D1 |
| URL 인코딩 | 가 | %EA%B0%80 |
| 위 결과를 다시 URL 인코딩 | %EA%B0%80 | %25EA%25B0%2580 |
%25는 퍼센트 기호 자체가 인코딩된 결과입니다. 출력에 이 패턴이 반복된다면 데이터가 전달되는 과정에서 인코딩을 두 번 적용했는지 확인하세요. 무작정 디코딩을 여러 번 반복하기보다, 어디서 한 번 인코딩하고 어디서 한 번 해제하는지 정하는 편이 안전합니다.
한글이 깨지거나 디코딩이 실패할 때
Base64가 맞더라도 바이트를 읽는 문자 인코딩이 다르면 한글은 깨질 수 있습니다. MDN의 Unicode 설명은 일반 Unicode 문자열을 먼저 UTF-8 바이트로 변환해야 한다고 안내합니다. 원본이 다른 인코딩이면 UTF-8 텍스트 도구만으로 원래 글자를 알아낼 수 없습니다.
표준 Base64의 +, /와 Base64url의 -, _도 구분해야 합니다. 토큰의 일부라고 해서 모두 같은 입력 규칙을 쓰지는 않습니다. URL 디코딩은 % 뒤의 잘못된 16진수나 유효하지 않은 UTF-8 조합에서 실패할 수 있습니다. 원본을 보관한 상태에서 값이 잘리거나 이미 디코딩되지 않았는지 확인하세요.
복사하기 전에 확인할 것
인코딩 결과를 같은 방식으로 한 번 디코딩해 원문이 돌아오는지 확인하세요. Base64와 URL 인코딩은 비밀 내용을 보호하는 암호화가 아니므로, 변환했다고 해서 공유 가능한 정보가 되는 것은 아닙니다. 공백이 +로 표현되는 폼 인코딩 규칙도 이 도구의 %20 처리와 다를 수 있으니 받는 쪽의 형식을 맞추세요.
내 조건으로 직접 확인해 보세요
읽은 내용을 필요한 도구에 적용해 보세요.
출처와 확인 기준
아래 자료와 도구의 현재 동작을 기준으로 작성했습니다. 제도·제품별 조건은 연결된 공식 안내에서 다시 확인하세요.