Base64 & URL 인코더 / 디코더
텍스트 및 파일 Base64 변환, UTF-8 한글 완벽 지원, URL 인코딩/디코딩
지금 계산한 분들이 함께 많이 사용하는 도구
사용 방법 및 안내
Base64 및 URL 인코더/디코더는 RFC 4648이 정한 64개 출력 가능 ASCII 문자(A-Z, a-z, 0-9, +, /와 패딩 기호 =)로 바이너리와 유니코드 텍스트를 안전하게 직렬화합니다. 웹 API, JSON, 이메일 MIME, HTML data URI에 8비트 값을 실어 나를 때 전송 경로가 7비트만 허용하거나 문자셋이 어긋나 데이터가 잘리는 문제를 막는 것이 목적입니다. 모든 변환은 사용자 브라우저의 FileReader, btoa/atob, encodeURIComponent로만 이루어지며 원문은 서버로 전송되지 않습니다.
UTF-8 한글 처리와 공백 정규화
브라우저 기본 btoa와 atob는 Latin-1(코드 포인트 0~255)만 받습니다. 한글은 UTF-8에서 글자당 보통 3바이트이므로, 인코딩 전에는 encodeURIComponent로 각 바이트를 펼친 뒤 Base64로 묶고, 디코딩 때는 atob 결과를 퍼센트 시퀀스로 되돌린 다음 decodeURIComponent로 UTF-8 문자열을 복원합니다. 예시로 한글 단어 한글은 UTF-8 6바이트(ED 95 9C EA B8 80)가 되어 Base64 값 7ZWc6riA가 됩니다. 메일이나 PEM처럼 76자마다 줄바꿈이 들어간 값, 공백과 탭이 섞인 값, URL-safe 문자(-와 _)는 디코딩 전에 제거하고 치환한 뒤 부족한 = 패딩을 채웁니다.
파일 Data URL과 URL 퍼센트 인코딩
파일 탭 인코딩은 FileReader.readAsDataURL로 data:[MIME 타입];base64,[페이로드] 형식의 Data URL을 만듭니다. 디코딩은 Data URL 전문 또는 순수 Base64를 받아 Blob으로 복원한 뒤 로컬 파일로 내려받습니다. MIME이 비어 있으면 PNG, JPEG, GIF, WebP, PDF 매직 바이트로 확장자를 추정합니다. URL 탭은 공백을 %20, 한글 한을 %ED%95%9C처럼 바꾸는 퍼센트 인코딩이며 JWT나 바이너리 전송에 쓰는 Base64와 용도가 다릅니다. HTML img src에 Data URL을 넣거나 REST 본문에 파일을 실을 때 바로 복사해 사용할 수 있습니다.
자주 묻는 질문 (FAQ)
Base64 인코딩은 왜 사용하나요?
이메일, JSON, HTTP처럼 텍스트만 허용하는 경로에서 8비트 바이너리가 잘리거나 치환되지 않도록 64개의 출력 가능 ASCII 문자로 바꿉니다. 입력 3바이트가 출력 4문자가 되므로 용량은 원본의 약 133%가 됩니다.
브라우저 btoa로 한글을 넣으면 왜 깨지고, 이 도구의 UTF-8 처리는 어떻게 다른가요?
btoa는 Latin-1(0~255)만 받습니다. 한글 음절은 UTF-8에서 보통 3바이트라 문자열을 그대로 넣으면 예외가 나거나 글자가 깨집니다. 이 페이지는 encodeURIComponent로 UTF-8 바이트를 펼친 뒤 Base64로 묶습니다. '한글'은 7ZWc6riA가 되고, 디코딩하면 같은 두 글자로 돌아옵니다.
Data URL이나 순수 Base64를 다시 파일로 내려받을 수 있나요?
가능합니다. 파일 Base64 탭에서 디코딩을 고른 뒤 data:[mime];base64,... 전문 또는 순수 Base64를 붙여 넣으면 공백을 정규화한 다음 Blob으로 복원해 다운로드합니다. 이미지 MIME이면 로컬 미리보기도 표시됩니다.
줄바꿈이나 URL-safe 문자가 섞인 Base64는 왜 실패하고, 어떻게 고치나요?
MIME/PEM은 76자마다 줄을 나누고, 일부 API는 +와 / 대신 -와 _를 씁니다. 이 디코더는 공백과 줄바꿈을 모두 제거한 뒤 문자를 표준 알파벳으로 되돌리고, 부족한 = 패딩을 채운 다음 atob를 호출합니다.
URL 인코딩과 Base64는 무엇이 다르고, 입력 데이터가 서버로 올라가나요?
URL 인코딩은 쿼리스트링 예약 문자를 퍼센트로 이스케이프합니다(공백은 %20). Base64는 JSON, JWT, Data URL에 바이너리나 유니코드를 실을 때 씁니다. FileReader와 클립보드는 브라우저에서만 동작하며 원문은 서버로 전송되지 않습니다.