Base85 Encoder / Decoder
Codifica e decodifica il testo utilizzando Base85 (ASCII85) e la codifica RFC 1924.
Informazioni su Base85
Base85 codifica dati binari usando 85 caratteri ASCII stampabili. ASCII85 è usato in PDF e PostScript. RFC 1924 usa un set di caratteri diverso.
Informazioni sullo strumento
Base85 è un sistema di codifica binario-a-testo che converte dati grezzi in testo ASCII leggibile, ideale per trasmettere informazioni binarie attraverso canali di solo testo. A differenza di Base64, che espande i dati del 33%, Base85 è molto più efficiente in termini di spazio, aggiungendo solo circa il 25% alla dimensione del file—un vantaggio significativo quando si lavora con payload di grandi dimensioni come immagini o allegati di documenti.
Per utilizzare questo encoder, scegli semplicemente la tua variante di codifica (ASCII85 è lo standard Adobe utilizzato in PDF e PostScript; RFC 1924 è un'alternativa orientata al network), quindi seleziona la modalità di codifica o decodifica. Incolla il tuo testo o i dati codificati, fai clic sul pulsante, e il risultato appare con un confronto delle dimensioni che mostra esattamente quanto spazio occupa la versione codificata.
Base85 brilla in contesti specializzati dove sia l'efficienza che la sicurezza del testo sono importanti: PDF che archiviano font incorporati, grafica PostScript nei flussi di lavoro di stampa, o protocolli di rete che richiedono rappresentazioni compatte di dati binari. Sebbene Base64 rimanga più universalmente supportato, Base85 è la scelta standard quando devi minimizzare la dimensione dell'output senza sacrificare la portabilità.
Domande Frequenti
Implementazione del Codice
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.