Uuencode och uudecode

Koda text, hexbyte eller filer i det klassiska Unix-to-Unix-formatet, eller avkoda uuencode-block från gamla e-postmeddelanden, Usenet-arkiv och skript tillbaka till ursprungsdatan.

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

Så använder du verktyget

  1. Välj Koda för att skapa ett uuencode-block, eller Avkoda för att få tillbaka datan ur ett.
  2. Låt begin-/end-rader vara påslaget och ange ett namn under Filnamn om resultatet ska fungera med kommandot uudecode. Slå av alternativet om du bara vill ha dataraderna.
  3. Skriv eller klistra in indata, eller öppna en fil för att koda dess byte.
  4. Vid avkodning klistrar du in hela blocket, inklusive begin-raden om det finns en, och kopierar sedan resultatet eller laddar ned det som en fil.

Vad är uuencode?

Uuencode, kort för Unix-to-Unix encode, kommer från omkring 1980, då filer kopierades mellan Unix-datorer över UUCP-förbindelser som bara klarade text. Kodningen gör om varje grupp om 3 byte till fyra 6-bitarsvärden och lägger till 32 till vart och ett, vilket ger utskrivbara tecken från mellanslaget till understrecket. Eftersom e-postsystem ofta tog bort mellanslag i slutet av rader skrivs värdet noll som en grav accent (`) i stället för ett mellanslag, och det gör även det här verktyget.

En uuencode-fil har en fast struktur:

  • En rubrikrad begin 644 name, där 644 är filrättigheterna i Unix skrivna oktalt (ägaren kan läsa och skriva, alla andra kan läsa) och name är filen som ska skapas.
  • Datarader med upp till 45 byte indata. Varje rad börjar med ett längdtecken (32 plus antalet byte, så en full rad börjar med M) följt av upp till 60 kodade tecken.
  • En rad med en enda grav accent, som betyder noll byte, och sedan raden end.

Med längdtecknen och radbrytningarna blir utdatan cirka 38 % större än indatan.

Uuencode i dag

Före MIME var uuencode det vanliga sättet att skicka program och bilder med e-post och att lägga upp dem på Usenet. Base64 i MIME ersatte det under 1990-talet: uuencode saknade ett sätt att ange innehållstyp, det fanns flera inkompatibla varianter, och en del av skiljetecknen ändrades av gateways mellan ASCII- och EBCDIC-system, vilket är anledningen till att xxencode skapades.

Du stöter fortfarande på uuencode-data i e-post- och nyhetsgruppsarkiv, äldre skalskript och äldre system. För nya projekt använder du Base64, eller Fil till Base64 för hela filer.

Uuencode på kommandoraden och i Python

# Skal (GNU sharutils): indatafilen, sedan namnet för begin-raden
uuencode photo.jpg photo.jpg > photo.uu
uudecode photo.uu

# Python: en rad på upp till 45 byte åt gången
import binascii
line = binascii.b2a_uu(b'hello', backtick=True)
binascii.a2b_uu(line)          # ger b'hello'

Pythons gamla modul uu togs bort i Python 3.13, men funktionerna i binascii finns kvar.

Specifikation

AlfabetASCII 32 till 96 (mellanslag till `)
UtdatastorlekCirka 137 % inklusive radprefix
UtfyllnadRader på högst 45 byte
StandardPOSIX uuencode
SkiftlägeskänsligJa

Exempel

Indata (UTF-8)Utdata
Hello, World!begin 644 data.bin -2&5L;&\L(%=O<FQD(0`` ` end
Base64.isbegin 644 data.bin )0F%S938T+FES ` end
你好begin 644 data.bin &Y+V@Y:6] ` end

Vanliga frågor

Varför innehåller uuencode-text grava accenter (backticks)?

Värdet noll skulle motsvara ett mellanslag, och mellanslag i slutet av rader försvann ofta under överföringen. Många kodare, även den här, skriver i stället en grav accent. Avkodaren accepterar båda.

Vad betyder begin 644?

Raden inleder det kodade blocket. 644 är Unix-rättigheterna för den återställda filen (läsa och skriva för ägaren, läsa för alla andra), och ordet efter är filnamnet som uudecode skapar. Du kan ange namnet bland alternativen.

Kan jag avkoda uuencode utan begin-raden?

Ja. Om det inte finns någon begin-rad avkodas varje rad som data. Om det finns en börjar avkodningen efter den och slutar vid end-raden, så text runt blocket, till exempel brödtexten i ett e-postmeddelande, hoppas över. Mellanslag i radslut som e-postprogram har tagit bort återställs automatiskt.

Är uuencode samma sak som Base64?

Nej. Båda gör om 3 byte till 4 tecken, men uuencode använder ett annat teckenintervall, ett längdtecken på varje rad samt begin- och end-rader. Base64-utdata kan inte avkodas som uuencode, och inte heller tvärtom.