Så använder du verktyget
- Välj Koda för att skapa ett uuencode-block, eller Avkoda för att få tillbaka datan ur ett.
- 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.
- Skriv eller klistra in indata, eller öppna en fil för att koda dess byte.
- 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
| Alfabet | ASCII 32 till 96 (mellanslag till `) |
|---|---|
| Utdatastorlek | Cirka 137 % inklusive radprefix |
| Utfyllnad | Rader på högst 45 byte |
| Standard | POSIX uuencode |
| Skiftlägeskänslig | Ja |
Exempel
| Indata (UTF-8) | Utdata |
|---|---|
Hello, World! | begin 644 data.bin
-2&5L;&\L(%=O<FQD(0``
`
end |
Base64.is | begin 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.