Kodare och avkodare för Base85

Konvertera text, hexbyte eller filer till Base85 och tillbaka. Sidan använder teckenuppsättningen i RFC 1924, den variant som Python b85encode skapar och som används i binära patchar i Git.

Körs helt i din webbläsare. Inget laddas upp.

Så använder du verktyget

  1. 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.
  2. Skriv eller klistra in indata, eller öppna en fil. Välj Hex under Indata som om du arbetar med råa byte.
  3. Resultatet uppdateras medan du skriver. Vid avkodning väljer du Text eller Hex under Utdata som, beroende på vad datan innehåller.
  4. 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() och b85decode(), 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

Alfabet0-9 A-Z a-z !#$%&()*+-;<=>?@^_`{|}~
Utdatastorlek5 tecken per 4 byte (125 %)
UtfyllnadIngen
StandardTeckenuppsättningen i RFC 1924 (Git, Python b85)
SkiftlägeskänsligJa

Exempel

Indata (UTF-8)Utdata
Hello, World!NM&qnZ!92JZ*pv8Ap
Base64.isLSb`dHZ(42a{
你好<h`KfrM&

Vanliga frågor

Är Base85 samma sak som Ascii85?
De använder samma aritmetik men olika tecken, så deras utdata skiljer sig åt. Ascii85 förkortar dessutom fyra nollbyte till 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?
Varje grupp om 4 byte blir 5 tecken, så utdatan blir 1,25 gånger så stor som indatan. Med Base64 blir den cirka 1,33 gånger så stor. basE91 är ännu lite mer kompakt.
Kan jag lägga Base85 i JSON eller XML?
I JSON, ja: alfabetet saknar dubbla citattecken och bakstreck, så ingenting behöver escapas. I XML och HTML måste tecknen <, > och & escapas. Base85 är inte URL-säker.