Vai al contenuto
🛠️ToolsShed

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.