사용 방법
- 텍스트나 바이트를 Ascii85로 바꾸려면 ‘인코딩’을, Ascii85를 원래 데이터로 되돌리려면 ‘디코딩’을 선택합니다.
- 출력을 PostScript 파일에 넣을 예정이거나, Python a85encode에서 adobe=True를 지정했을 때와 같은 결과가 필요하다면 ‘구분 기호 <~ ~>’를 켭니다.
- 긴 출력을 여러 줄로 나누려면 필요에 따라 ‘줄 바꿈’을 설정합니다.
- 내용을 입력하거나 붙여넣거나 파일을 연 다음, 결과를 복사하거나 다운로드합니다. 디코딩할 때 구분 기호, 공백, 줄 바꿈은 무시됩니다.
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.is | 6=FqH2Dd%#Er |
你好 | jLq5JV7c |
자주 묻는 질문
Ascii85와 Base85의 차이는 무엇입니까?
출력에 문자 z가 들어 있는 이유는 무엇입니까?
z는 완전한 그룹을 이루는 0 바이트 4개를 나타냅니다. 디코더가 자동으로 원래대로 펼치므로 데이터는 바뀌지 않습니다.Adobe 구분 기호가 꼭 필요합니까?
PostScript 인터프리터나 adobe=True를 지정한 Python a85decode처럼 데이터를 읽는 프로그램이 구분 기호를 요구할 때만 필요합니다. 많은 도구는 구분 기호가 없는 Ascii85도 받아들입니다. 이 페이지에서 디코딩할 때 구분 기호는 있어도 되고 없어도 됩니다.
PDF의 ASCII85 스트림을 디코딩할 수 있습니까?
예. 스트림 데이터를 붙여넣고 출력을 ‘16진수’로 선택하거나 결과를 다운로드하십시오. 스트림의 필터 목록에서 ASCII85Decode 뒤에 FlateDecode가 있다면, 디코딩한 바이트는 여전히 zlib으로 압축되어 있으므로 압축을 푸는 단계를 한 번 더 거쳐야 합니다.
잘못된 문자 오류가 발생하는 이유는 무엇입니까?
!부터 u까지의 문자와 그룹 사이의 z만 허용합니다. 일부 btoa 버전과 foldspaces=True를 지정한 Python이 사용하는, 공백 4개를 나타내는 y 약어는 Adobe 형식에 포함되지 않으므로 거부됩니다.