파일 업로드
  1. base64hub
  2. 기타 진법
  3. Base85 / Ascii85

Base85 / Ascii85 인코더 및 디코더

텍스트를 입력하면 PDF와 PostScript의 Base85 방식인 Adobe Ascii85가 나옵니다. 출력 아래에서 <~ ~> 구분자를 추가하거나 z 단축 표기를 끌 수 있고, Git의 Base85, Z85, RFC 1924로 바꿀 수도 있습니다.

무료 가입 없음, 제한 없음 로컬 업로드 없음 4가지 변형 Ascii85, Git/Python, Z85, RFC 1924 업데이트 2026. 10. 27.
입력 0바이트 0 B출력 0

브라우저에서 처리됩니다. 이 페이지는 데이터를 어디로도 보낼 수 없습니다 – 확인 방법

Ascii85를 인코딩하고 디코딩하는 방법

  1. 입력 · 텍스트에 텍스트를 입력하거나 붙여넣으세요. 출력 · Ascii85 (Adobe) 칸에 Ascii85가 나타납니다.
  2. 출력 아래에서 PostScript/PDF 형식의 틀이 필요하면 <~ ~> 구분자 추가를 체크하고, 디코더가 단축 표기를 지원하지 않으면 0 그룹을 z로 체크를 해제하세요.
  3. 다른 Base85 알파벳을 쓰려면 변환 후를 Base85 (Git / Python b85), Z85 (ZeroMQ), RFC 1924 (IPv6 Base85) 중 하나로 바꾸세요.
  4. 디코딩하려면 방향 전환에서 Ascii85 (Adobe) → 텍스트를 누르세요. 디코더는 <~ ~> 구분자, z, y, 모든 공백 문자를 받으므로 파일에서 줄 바꿈된 데이터를 그대로 붙여넣을 수 있습니다.
  5. 결과가 바이너리라면 변환 후를 Hex로 설정하거나 바이트 저장을 누르세요.

Ascii85의 작동 원리

Ascii85는 4바이트씩 가져와 하나의 32비트 빅 엔디언 숫자로 읽은 뒤 85진수 다섯 자리로 씁니다. 각 자리는 !(값 0)부터 u(값 84)까지의 문자입니다. 4바이트에 5문자이므로 오버헤드는 25%이고, Base64는 33%입니다.

대표적인 예는 끝에 공백이 붙은 Man 입니다. 바이트 4d 61 6e 20은 9jqo^가 됩니다. 마지막 그룹이 짧으면 인코더는 0 바이트로 채운 뒤 n바이트에 대해 n + 1자만 씁니다. 그래서 Hello(5바이트)는 87cURDZ가 됩니다. Hell에 다섯 문자, o에 두 문자입니다.

자주 나오는 패턴은 두 가지 단축 표기로 줄입니다. z는 0 바이트 네 개로 된 그룹, 풀어 쓰면 !!!!!를 대신합니다. y는 btoa 변형에서 공백 네 개를 대신합니다. 이 디코더는 둘 다 읽으며, 인코더는 z를 쓰고(끌 수 있음) y는 쓰지 않습니다.

Base85 변형 비교

변형알파벳Hello사용처
Ascii85 (Adobe)ASCII 순서의 !부터 u까지87cURDZPostScript, PDF /ASCII85Decode
Base85 (Git / Python)0-9 A-Z a-z !#$%&()*+-;<=>?@^_`{|}~NM&qnZvGit 바이너리 패치, Python base64.b85encode
Z850-9 a-z A-Z .-:+=^!/*?&<>()[]{}@%$#nm=QNzVZeroMQ와 CurveZMQ 키, Z85 참고
RFC 1924Git과 같음IPv6 주소 하나가 4)+k&C#VzJ4br>0wv%YpIPv6 주소, 농담으로

Git과 RFC 1924의 알파벳은 같지만, RFC 1924는 16바이트 주소 전체를 4바이트 그룹 네 개가 아니라 하나의 128비트 숫자로 다룹니다. RFC 1924는 1996년 4월 1일에 발표되었으며 1080::8:800:200c:417a를 4)+k&C#VzJ4br>0wv%Yp로 쓰자고 제안합니다. 변환기에서 변환 전을 IPv6 주소로, 변환 후를 RFC 1924 (IPv6 Base85) 형식으로 설정하면 이 결과가 재현됩니다.

PDF와 PostScript의 Ascii85

PostScript Level 2는 이미지나 글꼴 같은 바이너리 데이터를 텍스트 파일에 넣으려고 Ascii85를 도입했습니다. 데이터는 <~ … ~>로 감쌉니다. PDF에서는 /Filter /ASCII85Decode가 붙은 스트림이 같은 인코딩을 담고 있으며 ~>로 끝납니다. 이 디코더는 여는 <~가 있든 없든 끝 표시를 찾아냅니다.

Ascii85는 /Filter [/ASCII85Decode /FlateDecode]처럼 필터 체인의 바깥쪽에 오는 경우가 많습니다. 이때 Ascii85를 디코딩하면 읽을 수 있는 내용이 아니라 zlib으로 압축된 바이트가 나옵니다.

Git은 Base85를 다르게 씁니다. GIT binary patch에서 각 줄은 길이를 나타내는 문자 하나(1–26바이트는 A–Z, 27–52바이트는 a–z)로 시작하고, 그 뒤에 zlib으로 압축한 데이터의 Base85가 옵니다. 디코딩하기 전에 각 줄의 첫 문자를 지우고, 결과의 압축을 푸세요.

Python에서 Ascii85와 Base85

표준 라이브러리에 두 알파벳이 모두 있습니다.

import base64

base64.a85encode(b"Hello")                 # b'87cURDZ'
base64.a85encode(b"Hello", adobe=True)     # b'<~87cURDZ~>'
base64.a85encode(b"    ", foldspaces=True) # b'y'
base64.b85encode(b"Hello")                 # b'NM&qnZv'
base64.a85decode(b"<~9jqo^~>", adobe=True) # b'Man '

a85decode가 구분자를 받으려면 adobe=True가 필요합니다. 더 많은 인코딩 예시는 Python 페이지에 있습니다.

자주 생기는 문제

  • … 위치의 "z"은(는) 5자 그룹 사이에서만 허용됩니다. 그룹 안에 z가 있습니다. 데이터가 손상되었거나 Ascii85가 아닙니다. Z85와 Git의 Base85는 z를 일반 숫자로 씁니다.
  • … 위치에서 시작하는 그룹이 범위를 벗어났습니다. 다섯 문자가 2^32 − 1보다 큰 값을 인코딩하고 있습니다. Git Base85나 Z85를 Ascii85로 디코딩할 때 생기므로 변환 전을 바꾸세요.
  • v, {, | 같은 예상하지 못한 문자. y와 z 단축 표기를 제외하면 u 뒤의 문자는 모두 Ascii85 알파벳 밖에 있습니다. 이것도 다른 변형이라는 신호입니다.
  • 출력 끝에 0 바이트가 더 붙음. 인코더가 마지막 그룹을 채운 뒤 5문자를 모두 썼기 때문입니다. Ascii85는 n바이트짜리 마지막 그룹에 n + 1자를 씁니다.

자주 묻는 질문

Base85와 Ascii85는 어떻게 다른가요?

Base85는 4바이트를 85개 문자 집합에서 고른 5문자로 쓰는 방식 전반을 가리킵니다. Ascii85는 Adobe의 버전으로, !부터 u까지의 문자, z 단축 표기, <~ ~> 구분자를 씁니다. Git, Python의 b85encode, Z85, RFC 1924는 같은 계산 방식에 다른 알파벳을 씁니다.

Ascii85에서 z는 무슨 뜻인가요?

z 하나는 0 바이트 네 개를 나타내며, 그렇지 않으면 !!!!!로 써야 합니다. 5문자 그룹이 시작될 자리에서만 허용되고, 그룹 안에 있는 z는 오류입니다.

PDF의 Ascii85는 어떻게 디코딩하나요?

stream과 endstream 사이의 스트림 데이터를 ~>까지 포함해 복사하고, 방향을 Ascii85 (Adobe) → 텍스트로 설정해 붙여넣으세요. 스트림에 /FlateDecode도 지정되어 있다면 결과는 zlib 데이터입니다. 변환 후를 Base64로 설정하고 gzip, zlib 디코더로 압축을 푸세요.

Base85가 Base64보다 나은가요?

약 6% 짧습니다. 오버헤드가 33%가 아니라 25%입니다. 하지만 변형에 따라 알파벳에 따옴표, 백슬래시, <, &가 들어 있어서 Base64라면 필요 없는 이스케이프를 JSON, XML, 셸에서 해야 합니다. 이런 문자가 안전한 곳에서 쓰세요.