Cara menggunakan
- Pilih Enkode untuk mengubah teks atau byte menjadi Ascii85, atau Dekode untuk mengubah Ascii85 kembali menjadi data.
- Aktifkan opsi Pembatas untuk menambahkan pembatas Adobe jika keluaran akan dimasukkan ke PostScript atau harus sama dengan Python a85encode dengan adobe=True.
- Jika perlu, atur Bungkus baris agar keluaran yang panjang dipecah menjadi beberapa baris.
- Ketik, tempel, atau klik Buka file, lalu salin atau unduh hasilnya. Saat mendekode, pembatas, spasi, dan jeda baris diabaikan.
Apa itu Ascii85?
Ascii85 membaca masukan 4 byte sekaligus, memperlakukan setiap kelompok sebagai bilangan 32 bit, lalu menuliskannya sebagai 5 digit basis 85. Digit-digitnya adalah 85 karakter ASCII berurutan dari ! (kode 33) hingga u (kode 117): setiap karakter cukup berupa nilai digit ditambah 33. Keluarannya 25% lebih besar daripada masukan, dibandingkan 33% pada Base64.
Format ini pertama kali dipakai oleh utilitas Unix btoa. Adobe kemudian mengadopsinya sebagai pengodean ASCII basis 85 di PostScript Level 2 dan PDF, sehingga data biner seperti gambar dan font dapat dibawa di dalam file teks biasa. Python menyediakannya sebagai base64.a85encode() dan Go sebagai paket encoding/ascii85.
Singkatan z dan pembatas Adobe
Kelompok berisi empat byte nol biasanya akan ditulis sebagai lima tanda seru. Ascii85 menuliskannya sebagai satu z saja, sehingga deretan data kosong tetap pendek. Singkatan ini hanya berlaku untuk kelompok yang lengkap. Jika panjang masukan bukan kelipatan 4, kelompok terakhir yang berisi n byte menjadi n + 1 karakter dan tidak pernah disingkat.
PostScript menandai string Ascii85 dengan <~ di awal dan ~> di akhir. Dalam stream PDF dengan filter ASCII85Decode, hanya ~> penutup yang dipakai, sebagai penanda akhir data. Decoder di sini menghapus kedua pembatas tersebut bila ada dan mengabaikan spasi kosong, sehingga Anda dapat menempelkan data stream dari file PDF atau PostScript secara langsung.
Ascii85 dalam kode
# 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))) // siapkan buffer keluaran
n := ascii85.Encode(dst, src)
Spesifikasi
| Alfabet | ASCII 33 (!) hingga 117 (u), ditambah z |
|---|---|
| Ukuran keluaran | 5 karakter per 4 byte (125%) |
| Padding | Tidak ada, pembatas <~ ~> opsional |
| Standar | Adobe PostScript dan PDF |
| Peka huruf besar-kecil | Ya |
Contoh
| Masukan (UTF-8) | Keluaran |
|---|---|
Hello, World! | 87cURD_*#4DfTZ)+T |
Base64.is | 6=FqH2Dd%#Er |
你好 | jLq5JV7c |
Pertanyaan yang sering diajukan
Apa perbedaan Ascii85 dan Base85?
Mengapa keluaran saya berisi huruf z?
z mewakili empat byte nol dalam satu kelompok lengkap. Decoder mengembalikannya secara otomatis, sehingga datanya tidak berubah.Apakah saya memerlukan pembatas Adobe?
Hanya jika program yang membaca data mengharapkannya, misalnya interpreter PostScript atau Python a85decode dengan adobe=True. Banyak alat menerima Ascii85 tanpa pembatas. Saat mendekode di sini, pembatas bersifat opsional.
Bisakah saya mendekode stream ASCII85 dari PDF?
Bisa. Tempel data stream-nya lalu pilih keluaran Hex atau unduh hasilnya. Jika filter stream mencantumkan FlateDecode setelah ASCII85Decode, byte hasil dekode masih terkompresi zlib dan memerlukan langkah kedua.
Mengapa saya mendapat galat karakter tidak valid?
! hingga u, ditambah z di antara kelompok. Singkatan y untuk empat spasi, yang dipakai sebagian versi btoa dan oleh Python dengan foldspaces=True, bukan bagian dari format Adobe dan akan ditolak.