ASCII 텍스트를 Base64로 인코딩하는 방법
- 입력 · 텍스트에 텍스트를 입력하거나 붙여넣으세요. 문자 인코딩은 ASCII로 미리 설정되어 있습니다.
- 출력 · Base64에 Base64가 나타납니다. 텍스트에 ASCII 밖의 문자가 있으면 도구 아래의 경고가 몇 개가
?로 바뀌었는지 알려 줍니다. - 그 문자를 지우거나 다른 문자로 바꾸세요. 받는 쪽이 UTF-8을 이해한다면 문자 인코딩을 UTF-8로 바꿔도 됩니다.
- 결과를 복사하거나
base64.txt로 다운로드하세요.
반대 방향은 Base64를 ASCII로입니다.
무엇이 ASCII인가
ASCII는 0부터 127까지 128개의 코드를 정의하며, 각각 최상위 비트가 0인 1바이트입니다. 코드 32부터 126까지는 출력 가능한 문자로, 공백, 숫자, 영문자, 흔한 문장 부호입니다. 코드 0부터 31까지와 127은 탭(9), 라인 피드(10), 캐리지 리턴(13) 같은 제어 문자입니다.
é, ß, €, 둥근 따옴표, 줄 바꿈 없는 공백, 이모지, 한글을 비롯한 나머지는 모두 ASCII가 아닙니다. 워드 프로세서나 웹 페이지에서 붙여넣은 텍스트에는 이런 문자가 주로 타이포그래피용 따옴표와 대시의 형태로 눈에 띄지 않게 섞여 있는 경우가 많으며, 치환 경고가 이를 잡아냅니다.
예시
| 텍스트 | Base64 | 비고 |
|---|---|---|
Hello, ASCII! | SGVsbG8sIEFTQ0lJIQ== | UTF-8과 같음 |
200 OK | MjAwIE9L | 6바이트, 패딩 없음 |
{}[]<> | e31bXTw+ | 문장 부호도 평범한 바이트 |
a, 탭, b | YQli | 탭은 바이트 09 |
line1 CR LF line2 | bGluZTENCmxpbmUy | 가운데에 0D 0A |
user:pass | dXNlcjpwYXNz | HTTP Basic 인증 자격 증명 |
Grüße | R3I/P2U= | 2개 문자가 ?로 바뀜 |
naïve café | bmE/dmUgY2FmPw== | 2개 문자가 ?로 바뀜 |
모든 문자를 1바이트로 인코딩하므로 크기도 쉽게 예측할 수 있습니다. n개의 문자는 4 × ⌈n / 3⌉개의 Base64 문자가 됩니다.
ASCII와 Base64가 함께 다니는 이유
Base64는 7비트 ASCII만 안전하게 전달하던 채널을 위해 설계되었습니다. 초기 이메일(SMTP)이 대표적인 예입니다. 127보다 큰 바이트는 전송 중에 잘리거나 바뀔 수 있었기 때문에, 바이너리 첨부 파일과 영어가 아닌 텍스트는 모든 시스템이 처리할 수 있는 ASCII의 부분 집합으로 인코딩했습니다. 이것이 지금도 Base64가 존재하는 이유이고, 알파벳 구성도 이로써 설명됩니다. 64개 문자는 모두 출력 가능하고, ASCII에서 파생된 모든 문자 집합에서 똑같으며, +와 /를 빼면 흔한 형식에서 특별한 의미를 갖는 문자가 없습니다. 동작 원리는 Base64의 원리에서 자세히 다룹니다.
지금도 ASCII만 기대하는 시스템이 있습니다. 레거시 인터페이스나, 서버마다 비 ASCII 처리 방식이 다른 HTTP 헤더 값이 그렇습니다. 여기서 ASCII 문자 인코딩으로 인코딩해 보면 입력을 보내기 전에 그런 시스템에 안전한지 확인할 수 있습니다. 특히 Authorization 헤더에는 Basic Auth 헤더 생성기가 Basic dXNlcjpwYXNz 값 전체를 만들어 줍니다.
코드에서 ASCII를 Base64로
Python은 기본적으로 비 ASCII 문자를 거부하므로 검사 용도로도 유용합니다.
import base64
base64.b64encode("200 OK".encode("ascii")).decode() # 'MjAwIE9L'
"Grüße".encode("ascii")
# UnicodeEncodeError: 'ascii' codec can't encode characters in position 2-3
"Grüße".encode("ascii", errors="replace") # b'Gr??e', like this tool
JavaScript의 btoa()는 코드 255까지의 모든 문자를 받아들이므로 ü 같은 Latin-1 문자를 잡아내지 못합니다. 순수 ASCII여야 한다면 먼저 /^[\x00-\x7F]*$/.test(s)로 문자열을 검사하세요. 더 자세한 내용은 Python과 JavaScript 페이지에 있습니다.
자주 묻는 질문
ASCII를 Base64로 바꾸는 것과 UTF-8을 Base64로 바꾸는 것은 다른가요?
순수한 ASCII 텍스트라면 같습니다. UTF-8은 처음 128개 문자가 ASCII 바이트 값을 그대로 유지하도록 설계되었으므로, Hello, ASCII!는 둘 다 SGVsbG8sIEFTQ0lJIQ==가 됩니다. 텍스트에 다른 문자가 들어 있을 때만 결과가 달라집니다.
ü 같은 문자나 이모지, 한글은 어떻게 되나요?
ASCII에는 이런 문자의 코드가 없으므로 각각 ?(바이트 3F)로 바뀌고, 도구가 바뀐 개수를 알려 줍니다. Grüße는 R3I/P2U=로 인코딩되고, 이를 디코딩하면 Gr??e가 됩니다.
Base64 출력 자체도 ASCII인가요?
네. Base64가 쓰는 65개 문자(A–Z, a–z, 0–9, +, /, =)는 모두 출력 가능한 ASCII입니다. 그래서 Base64는 7비트 텍스트만 다루는 시스템도 통과할 수 있습니다.
탭이나 줄 바꿈 같은 제어 문자도 인코딩할 수 있나요?
네. 이들도 ASCII(코드 0–31)이며 다른 바이트와 똑같이 인코딩됩니다. a, 탭, b는 YQli가 됩니다.