Encoder dan Decoder Ascii85

Ubah teks, byte hex, atau file menjadi Ascii85, varian Base85 yang dipakai di PostScript dan PDF, dan sebaliknya. Tambahkan pembatas Adobe atau pecah keluaran panjang menjadi beberapa baris.

Berjalan sepenuhnya di browser Anda. Tidak ada yang diunggah.

Cara menggunakan

  1. Pilih Enkode untuk mengubah teks atau byte menjadi Ascii85, atau Dekode untuk mengubah Ascii85 kembali menjadi data.
  2. Aktifkan opsi Pembatas untuk menambahkan pembatas Adobe jika keluaran akan dimasukkan ke PostScript atau harus sama dengan Python a85encode dengan adobe=True.
  3. Jika perlu, atur Bungkus baris agar keluaran yang panjang dipecah menjadi beberapa baris.
  4. 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

AlfabetASCII 33 (!) hingga 117 (u), ditambah z
Ukuran keluaran5 karakter per 4 byte (125%)
PaddingTidak ada, pembatas <~ ~> opsional
StandarAdobe PostScript dan PDF
Peka huruf besar-kecilYa

Contoh

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

Pertanyaan yang sering diajukan

Apa perbedaan Ascii85 dan Base85?
Keduanya mengenkode 4 byte menjadi 5 karakter, tetapi dengan alfabet yang berbeda. Ascii85 memakai rentang dari ! hingga u dan memiliki singkatan z. Halaman Base85 memakai alfabet RFC 1924 dari Git dan Python b85encode, sedangkan Z85 adalah varian ZeroMQ.
Mengapa keluaran saya berisi huruf z?
Setiap 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?
Ascii85 hanya mengizinkan karakter dari ! 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.