Base85 Encoder / Decoder
Encode dan decode teks menggunakan encoding Base85 (ASCII85) dan RFC 1924.
Tentang Base85
Base85 mengenkode data biner menggunakan 85 karakter ASCII yang dapat dicetak. ASCII85 digunakan dalam PDF dan PostScript. RFC 1924 menggunakan set karakter yang berbeda.
Tentang alat ini
Base85 adalah sistem pengkodean biner-ke-teks yang mengonversi data mentah menjadi teks ASCII yang dapat dibaca, ideal untuk mengirimkan informasi biner melalui saluran hanya-teks. Tidak seperti Base64, yang memperluas data 33%, Base85 jauh lebih efisien ruang, menambahkan hanya sekitar 25% ke ukuran file—keuntungan signifikan saat menangani muatan besar seperti gambar atau lampiran dokumen.
Untuk menggunakan encoder ini, cukup pilih varian pengkodean Anda (ASCII85 adalah standar Adobe yang digunakan dalam PDF dan PostScript; RFC 1924 adalah alternatif yang berorientasi jaringan), kemudian pilih mode pengkodean atau dekode. Tempel teks atau data yang dikodekan, klik tombol, dan hasilnya muncul dengan perbandingan ukuran yang menunjukkan dengan tepat berapa banyak ruang yang dimakan oleh versi yang dikodekan.
Base85 bersinar dalam konteks khusus di mana efisiensi dan keamanan teks sama pentingnya: PDF yang menyimpan font tertanam, grafik PostScript dalam alur kerja percetakan, atau protokol jaringan yang memerlukan representasi biner yang kompak. Meskipun Base64 masih lebih didukung secara universal, Base85 adalah pilihan standar ketika Anda perlu meminimalkan ukuran output tanpa mengorbankan portabilitas.
Pertanyaan yang Sering Diajukan
Implementasi Kode
import struct
def encode_ascii85(data: bytes) -> str:
result = []
for i in range(0, len(data), 4):
chunk = data[i:i+4]
padded = chunk.ljust(4, b'\x00')
n = struct.unpack('>I', padded)[0]
if n == 0 and len(chunk) == 4:
result.append('z')
else:
chars = []
for _ in range(5):
chars.append(chr(n % 85 + 33))
n //= 85
result.extend(reversed(chars[:len(chunk)+1]))
return '<~' + ''.join(result) + '~>'
def decode_ascii85(s: str) -> bytes:
s = s.strip()
if s.startswith('<~') and s.endswith('~>'):
s = s[2:-2]
result = bytearray()
i = 0
while i < len(s):
if s[i] == 'z':
result.extend(b'\x00' * 4); i += 1
else:
chunk = s[i:i+5]
n = sum((ord(c) - 33) * (85 ** (4 - j)) for j, c in enumerate(chunk))
result.extend(struct.pack('>I', n)[:len(chunk)-1])
i += 5
return bytes(result)
text = "Hello, World!"
encoded = encode_ascii85(text.encode())
print("Encoded:", encoded)
print("Decoded:", decode_ascii85(encoded).decode())Comments & Feedback
Comments are powered by Giscus. Sign in with GitHub to leave a comment.