Så använder du verktyget
- Välj Koda för att göra om text eller byte till Base85, eller Avkoda för att göra om Base85 till data igen.
- Skriv eller klistra in indata, eller öppna en fil. Välj Hex under Indata som om du arbetar med råa byte.
- Resultatet uppdateras medan du skriver. Vid avkodning väljer du Text eller Hex under Utdata som, beroende på vad datan innehåller.
- Kopiera resultatet eller ladda ned det som en fil.
Vad är Base85?
Base85 är en familj av kodningar som gör om varje grupp om 4 byte till 5 tecken. Fem siffror i bas 85 kan rymma 85 × 85 × 85 × 85 × 85 = 4 437 053 125 värden, precis tillräckligt för vilket 32-bitarstal som helst, så utdatan blir bara 25 % större än indatan, jämfört med 33 % för Base64.
Det finns flera Base85-alfabet och de är inte utbytbara: Ascii85 (Adobe, PDF), Z85 (ZeroMQ) och det som används på den här sidan. Det består av 0-9, A-Z, a-z och 23 symboler: !#$%&()*+-;<=>?@^_`{|}~. Citattecknen, kommatecknet, punkten, snedstrecket, kolonet, bakstrecket och hakparenteserna är utelämnade.
RFC 1924, Git och Python
Teckenuppsättningen kommer från RFC 1924, "A Compact Representation of IPv6 Addresses", som publicerades den 1 april 1996 som ett aprilskämt. Den föreslog att en 128-bitars IPv6-adress skulle skrivas som ett enda tal i bas 85 med exakt 20 tecken. Ingen skriver IPv6-adresser på det sättet, men alfabetet återanvändes senare för binärdata i allmänhet:
- Git lagrar binärfiler i patchar (
git diff --binary,git format-patch) som zlib-komprimerad data kodad med det här alfabetet, med ett längdtecken i början av varje rad. - Python 3.4 och senare har
base64.b85encode()ochb85decode(), vars utdata stämmer överens med det här verktyget. - Mercurial använder samma kodning för binärfiler i diffar i Git-format.
Observera att RFC 1924 konverterar hela 128-bitarsadressen på en gång, medan Git, Python och det här verktyget arbetar i grupper om 4 byte, så ett värde på 16 byte ger ett annat resultat än med metoden i RFC:n.
Korta slutgrupper
När indatans längd inte är en multipel av 4 fylls den sista gruppen ut med nollbyte och kodas, och bara de första n + 1 tecknen behålls: 1 byte blir 2 tecken, 2 byte blir 3 och 3 byte blir 4. Avkodaren gör det omvända, så inga utfyllnadstecken behövs. Den här varianten har ingen förkortning för nollbyte, till skillnad från z i Ascii85.
# Python 3.4+
import base64
base64.b85encode(b'hello') # ger b'Xk~0{Zv'
base64.b85decode(b'Xk~0{Zv') # ger b'hello'
Specifikation
| Alfabet | 0-9 A-Z a-z !#$%&()*+-;<=>?@^_`{|}~ |
|---|---|
| Utdatastorlek | 5 tecken per 4 byte (125 %) |
| Utfyllnad | Ingen |
| Standard | Teckenuppsättningen i RFC 1924 (Git, Python b85) |
| Skiftlägeskänslig | Ja |
Exempel
| Indata (UTF-8) | Utdata |
|---|---|
Hello, World! | NM&qnZ!92JZ*pv8Ap |
Base64.is | LSb`dHZ(42a{ |
你好 | <h`KfrM& |
Vanliga frågor
Är Base85 samma sak som Ascii85?
z och kan omges av Adobes avgränsare. Använd sidan Ascii85 för data från PDF och PostScript.Var RFC 1924 en riktig standard?
Nej. Det är en informativ RFC som publicerades som ett aprilskämt och aldrig användes för IPv6-adresser. Teckenuppsättningen blev populär först senare, genom Git och Python.
Hur mycket större blir utdatan med Base85?
Kan jag lägga Base85 i JSON eller XML?
<, > och & escapas. Base85 är inte URL-säker.