Slik bruker du verktøyet
- Velg Kode for å gjøre tekst eller byte om til Base85, eller Dekode for å gjøre Base85 om til data igjen.
- Skriv eller lim inn inndataene, eller åpne en fil. Bytt inndata til Hex hvis du jobber med rå byte.
- Resultatet oppdateres mens du skriver. Ved dekoding velger du Tekst eller Hex som utdata, avhengig av hva dataene inneholder.
- Kopier resultatet eller last det ned som en fil.
Hva er Base85?
Base85 er en familie av kodinger som gjør hver gruppe på 4 byte om til 5 tegn. Fem base-85-sifre kan romme 85 × 85 × 85 × 85 × 85 = 4 437 053 125 verdier, akkurat nok til ethvert 32-biters tall, så utdataene er bare 25 % større enn inndataene, mot 33 % for Base64.
Det finnes flere Base85-alfabeter, og de kan ikke brukes om hverandre: Ascii85 (Adobe, PDF), Z85 (ZeroMQ) og det som brukes på denne siden. Det består av 0-9, A-Z, a-z og 23 symboler: !#$%&()*+-;<=>?@^_`{|}~. Anførselstegnene, komma, punktum, skråstrek, kolon, omvendt skråstrek og hakeparentesene er utelatt.
RFC 1924, Git og Python
Tegnsettet kommer fra RFC 1924, «A Compact Representation of IPv6 Addresses», som ble publisert 1. april 1996 som en aprilspøk. Den foreslo å skrive en 128-biters IPv6-adresse som ett base-85-tall på nøyaktig 20 tegn. Ingen skriver IPv6-adresser på den måten, men alfabetet ble senere gjenbrukt for generelle binære data:
- Git lagrer binære filer i patcher (
git diff --binary,git format-patch) som zlib-komprimerte data kodet med dette alfabetet, med et lengdetegn først på hver linje. - Python 3.4 og nyere har
base64.b85encode()ogb85decode(), og utdataene derfra samsvarer med dette verktøyet. - Mercurial bruker den samme kodingen for binære filer i differ i Git-stil.
Merk at RFC 1924 konverterer hele 128-biters adressen på én gang, mens Git, Python og dette verktøyet arbeider i grupper på 4 byte, så en verdi på 16 byte gir et annet resultat enn med RFC-metoden.
Korte sluttgrupper
Når inndatalengden ikke er et multiplum av 4, fylles den siste gruppen ut med nullbyte og kodes, og bare de første n + 1 tegnene beholdes: 1 byte blir 2 tegn, 2 byte blir 3 og 3 byte blir 4. Dekoderen reverserer dette, så ingen utfyllingstegn trengs. Denne varianten har ingen forkortelse for nullbyte, i motsetning til z i Ascii85.
# Python 3.4+
import base64
base64.b85encode(b'hello') # b'Xk~0{Zv'
base64.b85decode(b'Xk~0{Zv') # b'hello'
Spesifikasjon
| Alfabet | 0-9 A-Z a-z !#$%&()*+-;<=>?@^_`{|}~ |
|---|---|
| Utdatastørrelse | 5 tegn per 4 byte (125 %) |
| Utfylling | Ingen |
| Standard | Tegnsett fra RFC 1924 (Git, Python b85) |
| Skiller store og små bokstaver | Ja |
Eksempler
| Inndata (UTF-8) | Utdata |
|---|---|
Hello, World! | NM&qnZ!92JZ*pv8Ap |
Base64.is | LSb`dHZ(42a{ |
你好 | <h`KfrM& |
Ofte stilte spørsmål
Er Base85 det samme som Ascii85?
z og kan være omsluttet av Adobe-avgrensere. Bruk siden Ascii85 for PDF- og PostScript-data.Var RFC 1924 en ekte standard?
Nei. Det er en informativ RFC som ble publisert som en aprilspøk, og den ble aldri brukt til IPv6-adresser. Tegnsettet ble populært senere gjennom Git og Python.
Hvor mye større blir Base85-utdata?
Kan jeg bruke Base85 i JSON eller XML?
<, > og & escapes. Base85 er ikke URL-sikker.