Come si usa
- Scegli Codifica per trasformare testo o byte in Base85, oppure Decodifica per riportare Base85 ai dati originali.
- Digita o incolla l’input, oppure apri un file. Se lavori con byte grezzi, imposta Formato input su Esadecimale.
- Il risultato si aggiorna mentre scrivi. In decodifica, scegli l’output Testo o Esadecimale in base al contenuto dei dati.
- Copia il risultato o scaricalo come file.
Che cos’è Base85?
Base85 è una famiglia di codifiche che trasformano ogni gruppo di 4 byte in 5 caratteri. Cinque cifre in base 85 possono rappresentare 85 × 85 × 85 × 85 × 85 = 4.437.053.125 valori, appena sufficienti per qualsiasi numero a 32 bit, quindi l’output è solo il 25% più grande dell’input, contro il 33% di Base64.
Esistono diversi alfabeti Base85 e non sono intercambiabili: Ascii85 (Adobe, PDF), Z85 (ZeroMQ) e quello di questa pagina. Quest’ultimo usa 0-9, A-Z, a-z e 23 simboli: !#$%&()*+-;<=>?@^_`{|}~. Restano esclusi le virgolette, la virgola, il punto, la barra, i due punti, la barra rovesciata e le parentesi quadre.
RFC 1924, Git e Python
Il set di caratteri viene dalla RFC 1924, "A Compact Representation of IPv6 Addresses", pubblicata il 1° aprile 1996 come pesce d’aprile. Proponeva di scrivere un indirizzo IPv6 a 128 bit come un unico numero in base 85 di esattamente 20 caratteri. Nessuno scrive gli indirizzi IPv6 in quel modo, ma l’alfabeto è stato poi riutilizzato per i dati binari in generale:
- Git memorizza i file binari nelle patch (
git diff --binary,git format-patch) come dati compressi con zlib e codificati con questo alfabeto, con un carattere di lunghezza all’inizio di ogni riga. - Python 3.4 e versioni successive offre
base64.b85encode()eb85decode(), il cui output coincide con quello di questo strumento. - Mercurial usa la stessa codifica per i file binari nei diff in stile Git.
Tieni presente che la RFC 1924 converte l’intero indirizzo a 128 bit in un’unica operazione, mentre Git, Python e questo strumento lavorano a gruppi di 4 byte, quindi un valore di 16 byte dà un risultato diverso da quello del metodo della RFC.
Gruppi finali incompleti
Quando la lunghezza dell’input non è un multiplo di 4, l’ultimo gruppo viene completato con byte zero, codificato, e si tengono solo i primi n + 1 caratteri: 1 byte diventa 2 caratteri, 2 byte diventano 3 e 3 byte diventano 4. Il decodificatore inverte il procedimento, quindi non servono caratteri di padding. Questa variante non ha una scorciatoia per i byte zero, a differenza della z di Ascii85.
# Python 3.4+
import base64
base64.b85encode(b'hello') # b'Xk~0{Zv'
base64.b85decode(b'Xk~0{Zv') # b'hello'
Specifiche
| Alfabeto | 0-9 A-Z a-z !#$%&()*+-;<=>?@^_`{|}~ |
|---|---|
| Dimensione dell’output | 5 caratteri ogni 4 byte (125%) |
| Padding | Nessuno |
| Standard | Set di caratteri RFC 1924 (Git, Python b85) |
| Distingue maiuscole/minuscole | Sì |
Esempi
| Input (UTF-8) | Output |
|---|---|
Hello, World! | NM&qnZ!92JZ*pv8Ap |
Base64.is | LSb`dHZ(42a{ |
你好 | <h`KfrM& |
Domande frequenti
Base85 è la stessa cosa di Ascii85?
z e può essere racchiuso tra i delimitatori Adobe. Per i dati PDF e PostScript usa la pagina Ascii85.La RFC 1924 era un vero standard?
No. È una RFC informativa pubblicata come pesce d’aprile e non è mai stata usata per gli indirizzi IPv6. Il suo set di caratteri si è diffuso più tardi grazie a Git e Python.
Quanto è più grande l’output Base85?
Posso inserire Base85 in JSON o XML?
<, > e & vanno sottoposti a escape. Base85 non è sicuro per gli URL.