Ascii85
Ascii85 또는 Base85 불리는 이것은 Paul E. Rutter가 유틸리티 en:btoa를 위해 만든 en:binary-to-text encoding 방법으로 5개의 ASCII 문자로 4 바이트의 이진 데이터를 표현한다. ASCII 한 문자가 8비트라면 이 방법으로 하면 원본이 ¹⁄₄만큼 더 커진다. 이것은 4개의 문자로 3 바이트를 표현해서 ¹⁄₃만큼 더 커지는 en:uuencode나 베이스64보다 효율적이다.
기본 구상
편집binary-to-text encoding은 사람이 읽을 수 있는(en:human-readable) 문자만을 전송할 수 있는 기존 통신 프로토콜 위에서 이진 데이터를 다루기 위해서 필요했다. 이런 환경에서 문자는 7 비트만을 사용하고 그 마저도 일부 제어 문자를 빼야하므로 데이터의 전송에 사용할 수 있는 문자는 95개 뿐이다.
4 바이트는 232 = 4,294,967,296 가지의 값을 가지고, 5자리 85 진수(en:radix)는 855 = 4,437,053,125 가지의 값이 가능하므로 이걸로 32비트 값을 충분히 표현할 수 있다. 5자리의 84 진수는 845 = 4,182,119,424 가지 값만을 가지기 때문에 85가 5자리로 4바이트를 표현해 낼 수 있는 최소값이라 이것이 선택되었다.
인코딩은 4바이트를 big-endian으로 묶어 32비트 수를 얻는 것에서 시작한다. 이것을 85진수로 바꾼다. 85를 연속해서 나누면서 나머지들을 얻는 과정이다. 그렇게 5자리의 85진수가 얻어지면, 각 자리에 33를 더해서 33 ("!")에서 117 ("u")까지의 ASCII 문자로 바꾸는 것이다.
데이터가 모두 0인 경우는 상당히 흔하기 때문에 예외적으로 데이터 압축을 위해서 "z
" 한 문자로 인코딩한다. "!!!!!
"가 아니다.
디코딩했을 때 232 − 1(인코딩 했을 때 "s8W-!
")보다 큰 수는 에러다. as will "z
" characters in the middle of a group. White space between the characters is ignored and may occur anywhere to accommodate line-length limitations.
Ascii85의 한 가지 단점은 인코딩 데이터가 backslash나 quote 같은 en:escape character를 포함할 수 있다는 것인데, 이것들은 많은 프로그래밍 언어나 일부 문자 기반의 프로토콜에서 특별한 의미를 가지므로 문제가 될 수 있다. Z85는 소스 코드에서도 안전하도록 설계된 것이다.[1]
같이 보기
편집- Base32
- Base36
- Base64
- Binary-to-text encoding for a comparison of various encoding algorithms
각주
편집외부 링크
편집- BasE91
- btoa and atob source code from 1990
- PostScript Language Reference (Adobe) - see ASCII85Encode Filter
- Encoder/Decoder implementations in several languages:
- awk Archived 2014년 12월 29일 - 웨이백 머신
- C#
- F#
- Java (documentation)
- Perl
- ASCII85-Tools, Perl command-line utilities - C version also available.
- MPPerl::Convert::ASCII85::XS, a Perl module with time-critical code written in C
- Python
- Yet another RFC1924/ASCII85/IPv6 Base85 Python implementation (APLv2)
- RFC1924/ASCII85 C library and command line tool
- JavaScript