Sådan bruger du værktøjet
- Vælg Kod for at lave en uuencodet blok, eller Afkod for at gendanne dataene fra en.
- Lad begin-/end-linjer være slået til, og angiv et navn under Filnavn, hvis resultatet skal fungere med kommandoen uudecode. Slå indstillingen fra for kun at få datalinjerne.
- Skriv eller indsæt dit input, eller åbn en fil for at kode dens bytes.
- Ved afkodning indsætter du hele blokken, inklusive begin-linjen, hvis der er en, og kopierer derefter resultatet eller downloader det som en fil.
Hvad er uuencode?
Uuencode, en forkortelse for Unix-to-Unix encode, stammer fra omkring 1980, hvor filer blev kopieret mellem Unix-maskiner over UUCP-forbindelser, der kun kunne overføre tekst. Den omdanner hver gruppe på 3 bytes til fire 6-bit-værdier og lægger 32 til hver af dem, hvilket giver printbare tegn fra mellemrum til understregning. Da mailsystemer ofte fjernede mellemrum i slutningen af linjer, skrives værdien nul som en backtick (`) i stedet for et mellemrum, og det gør dette værktøj også.
En uuencodet fil har et fast layout:
- En headerlinje
begin 644 name, hvor 644 er Unix-filrettighederne angivet oktalt (ejeren kan læse og skrive, alle andre kan læse), og name er den fil, der skal oprettes. - Datalinjer med op til 45 inputbytes. Hver linje begynder med et længdetegn (32 plus antallet af bytes, så en fuld linje begynder med
M) efterfulgt af op til 60 kodede tegn. - En linje med en enkelt backtick, som betyder nul bytes, og derefter linjen
end.
Med længdetegn og linjeskift er outputtet ca. 38 % større end inputtet.
Uuencode i dag
Før MIME var uuencode den almindelige måde at sende programmer og billeder med e-mail og at poste dem på Usenet. MIME Base64 afløste den i løbet af 1990'erne: Uuencode kunne ikke angive en indholdstype, der fandtes flere inkompatible varianter, og nogle af dens tegnsætningstegn blev ændret af gateways mellem ASCII- og EBCDIC-systemer, hvilket er grunden til, at xxencode blev skabt.
Du støder stadig på uuencodede data i mail- og nyhedsarkiver, gamle shellscripts og forældede systemer. Til nyt arbejde bør du bruge Base64 eller Fil til Base64 til hele filer.
Uuencode på kommandolinjen og i Python
# Shell (GNU sharutils): inputfil og derefter navnet til begin-linjen
uuencode photo.jpg photo.jpg > photo.uu
uudecode photo.uu
# Python: én linje med op til 45 bytes ad gangen
import binascii
line = binascii.b2a_uu(b'hello', backtick=True)
binascii.a2b_uu(line) # b'hello'
Pythons gamle modul uu blev fjernet i Python 3.13, men funktionerne i binascii findes stadig.
Specifikation
| Alfabet | ASCII 32 til 96 (mellemrum til `) |
|---|---|
| Outputstørrelse | Ca. 137 % inkl. linjepræfikser |
| Udfyldning | Linjer på op til 45 bytes |
| Standard | POSIX uuencode |
| Skelner mellem store og små bogstaver | Ja |
Eksempler
| Input (UTF-8) | Output |
|---|---|
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 |
Ofte stillede spørgsmål
Hvorfor indeholder uuencodet tekst backticks?
Værdien nul ville svare til et mellemrum, og mellemrum i slutningen af linjer gik ofte tabt undervejs. Mange kodere, også denne, skriver i stedet en backtick. Dekoderen accepterer begge dele.
Hvad betyder begin 644?
Linjen indleder den kodede blok. 644 er Unix-rettighederne for den gendannede fil (læse- og skriveadgang for ejeren, læseadgang for alle andre), og ordet efter er det filnavn, som uudecode vil oprette. Du kan angive navnet under Filnavn.
Kan jeg afkode uuencode uden begin-linjen?
Ja. Hvis der ikke er nogen begin-linje, afkodes hver linje som data. Hvis der er en, starter afkodningen efter den og stopper ved end-linjen, så tekst omkring blokken, for eksempel brødteksten i en e-mail, springes over. Mellemrum i slutningen af linjer, som mailprogrammer har fjernet, gendannes automatisk.
Er uuencode det samme som Base64?
Nej. Begge omdanner 3 bytes til 4 tegn, men uuencode bruger et andet tegninterval, et længdetegn på hver linje samt begin- og end-linjer. Base64-output kan ikke afkodes som uuencode, og omvendt.