Uuencode og uudecode

Kod tekst, hexbytes eller filer i det klassiske Unix-to-Unix-format, eller afkod uuencodede blokke fra gamle e-mails, Usenet-arkiver og scripts tilbage til de oprindelige data.

Kører udelukkende i din browser. Intet bliver uploadet.

Sådan bruger du værktøjet

  1. Vælg Kod for at lave en uuencodet blok, eller Afkod for at gendanne dataene fra en.
  2. 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.
  3. Skriv eller indsæt dit input, eller åbn en fil for at kode dens bytes.
  4. 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

AlfabetASCII 32 til 96 (mellemrum til `)
OutputstørrelseCa. 137 % inkl. linjepræfikser
UdfyldningLinjer på op til 45 bytes
StandardPOSIX uuencode
Skelner mellem store og små bogstaverJa

Eksempler

Input (UTF-8)Output
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

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.