Ascii85 인코더 및 디코더

텍스트, 16진수 바이트, 파일을 PostScript와 PDF에서 쓰는 Base85 변형인 Ascii85로 변환하고 다시 되돌립니다. Adobe 구분 기호를 붙이거나 긴 출력을 여러 줄로 나눌 수 있습니다.

브라우저에서만 실행되며 어떤 데이터도 업로드되지 않습니다.

사용 방법

  1. 텍스트나 바이트를 Ascii85로 바꾸려면 ‘인코딩’을, Ascii85를 원래 데이터로 되돌리려면 ‘디코딩’을 선택합니다.
  2. 출력을 PostScript 파일에 넣을 예정이거나, Python a85encode에서 adobe=True를 지정했을 때와 같은 결과가 필요하다면 ‘구분 기호 <~ ~>’를 켭니다.
  3. 긴 출력을 여러 줄로 나누려면 필요에 따라 ‘줄 바꿈’을 설정합니다.
  4. 내용을 입력하거나 붙여넣거나 파일을 연 다음, 결과를 복사하거나 다운로드합니다. 디코딩할 때 구분 기호, 공백, 줄 바꿈은 무시됩니다.

Ascii85란?

Ascii85는 입력을 4바이트씩 읽어 각 그룹을 32비트 수로 보고, 이를 85진수 다섯 자리로 표기합니다. 각 자리에는 !(코드 33)부터 u(코드 117)까지 연속된 ASCII 문자 85개를 사용하며, 각 문자의 코드는 단순히 자릿값에 33을 더한 값입니다. 출력은 입력보다 25% 커지며, Base64는 33% 커집니다.

이 형식은 Unix의 btoa 유틸리티에서 처음 쓰였습니다. 이후 Adobe가 PostScript Level 2와 PDF의 ASCII base-85 인코딩으로 채택하면서, 이미지나 글꼴 같은 바이너리 데이터를 일반 텍스트 파일 안에 담아 전달할 수 있게 되었습니다. Python은 base64.a85encode()로, Go는 encoding/ascii85 패키지로 이 형식을 제공합니다.

z 약어와 Adobe 구분 기호

0 바이트 4개로 이루어진 그룹은 원래 느낌표 5개로 표기됩니다. Ascii85는 이를 z 하나로 대신 표기하여 빈 데이터가 연속될 때 출력을 짧게 유지합니다. 이 약어는 완전한 그룹에만 적용됩니다. 입력 길이가 4의 배수가 아니면 n바이트로 된 마지막 그룹은 n + 1문자가 되며, 절대 줄여 쓰지 않습니다.

PostScript는 Ascii85 문자열의 시작을 <~, 끝을 ~>로 표시합니다. ASCII85Decode 필터를 사용하는 PDF 스트림에서는 닫는 ~>만 데이터 끝 표시로 사용합니다. 이 페이지의 디코더는 두 구분 기호가 있으면 제거하고 공백 문자를 무시하므로, PDF나 PostScript 파일의 스트림 데이터를 그대로 붙여넣을 수 있습니다.

코드에서 Ascii85 사용하기

# Python 3.4+
import base64
base64.a85encode(b'hello')                      # b'BOu!rDZ'
base64.a85encode(b'hello', adobe=True)          # b'<~BOu!rDZ~>'
base64.a85decode(b'<~BOu!rDZ~>', adobe=True)    # b'hello'

// Go
import "encoding/ascii85"
dst := make([]byte, ascii85.MaxEncodedLen(len(src)))
n := ascii85.Encode(dst, src)

사양

알파벳ASCII 33(!)~117(u), z 추가
출력 크기4바이트당 5문자(125%)
패딩없음, <~ ~> 구분 기호는 선택 사항
표준Adobe PostScript 및 PDF
대소문자 구분예

예시

입력 (UTF-8)출력
Hello, World!87cURD_*#4DfTZ)+T
Base64.is6=FqH2Dd%#Er
你好jLq5JV7c

자주 묻는 질문

Ascii85와 Base85의 차이는 무엇입니까?
둘 다 4바이트를 5문자로 인코딩하지만 알파벳이 다릅니다. Ascii85는 !부터 u까지의 범위를 사용하며 z 약어가 있습니다. Base85 페이지는 Git과 Python b85encode에서 쓰는 RFC 1924 알파벳을 사용하며, Z85는 ZeroMQ 변형입니다.
출력에 문자 z가 들어 있는 이유는 무엇입니까?
각 z는 완전한 그룹을 이루는 0 바이트 4개를 나타냅니다. 디코더가 자동으로 원래대로 펼치므로 데이터는 바뀌지 않습니다.
Adobe 구분 기호가 꼭 필요합니까?

PostScript 인터프리터나 adobe=True를 지정한 Python a85decode처럼 데이터를 읽는 프로그램이 구분 기호를 요구할 때만 필요합니다. 많은 도구는 구분 기호가 없는 Ascii85도 받아들입니다. 이 페이지에서 디코딩할 때 구분 기호는 있어도 되고 없어도 됩니다.

PDF의 ASCII85 스트림을 디코딩할 수 있습니까?

예. 스트림 데이터를 붙여넣고 출력을 ‘16진수’로 선택하거나 결과를 다운로드하십시오. 스트림의 필터 목록에서 ASCII85Decode 뒤에 FlateDecode가 있다면, 디코딩한 바이트는 여전히 zlib으로 압축되어 있으므로 압축을 푸는 단계를 한 번 더 거쳐야 합니다.

잘못된 문자 오류가 발생하는 이유는 무엇입니까?
Ascii85는 !부터 u까지의 문자와 그룹 사이의 z만 허용합니다. 일부 btoa 버전과 foldspaces=True를 지정한 Python이 사용하는, 공백 4개를 나타내는 y 약어는 Adobe 형식에 포함되지 않으므로 거부됩니다.