Uuencode og uudecode

Kod tekst, hex-byte eller filer i det klassiske Unix-to-Unix-formatet, eller dekod uuencode-blokker fra gamle e-poster, Usenet-arkiver og skript tilbake til de opprinnelige dataene.

Kjører helt i nettleseren din. Ingenting lastes opp.

Slik bruker du verktøyet

  1. Velg Kode for å lage en uuencode-blokk, eller Dekode for å hente dataene ut av en.
  2. La begin- / end-linjer være slått på og fyll inn Filnavn hvis resultatet skal fungere med kommandoen uudecode. Slå dem av for å få bare datalinjene.
  3. Skriv eller lim inn inndataene, eller åpne en fil for å kode bytene i den.
  4. Ved dekoding limer du inn hele blokken, inkludert begin-linjen hvis den finnes, og kopierer deretter resultatet eller laster det ned som en fil.

Hva er uuencode?

Uuencode, kort for Unix-to-Unix encode, stammer fra rundt 1980, da filer ble kopiert mellom Unix-maskiner over UUCP-forbindelser som bare kunne overføre tekst. Den gjør hver gruppe på 3 byte om til fire 6-biters verdier og legger 32 til hver av dem, noe som gir utskrivbare tegn fra mellomrom til understrek. Fordi e-postsystemer ofte fjernet mellomrom på slutten av linjer, skrives verdien null som en backtick (`) i stedet for et mellomrom, slik dette verktøyet gjør.

En uuencode-fil har en fast oppbygning:

  • En topplinje begin 644 name, der 644 er Unix-filmodusen i oktal (eieren kan lese og skrive, alle andre kan lese) og name er filen som skal opprettes.
  • Datalinjer med opptil 45 inndatabyte. Hver linje begynner med et lengdetegn (32 pluss antall byte, så en full linje begynner med M) etterfulgt av opptil 60 kodede tegn.
  • En linje med én enkelt backtick, som betyr null byte, og deretter linjen end.

Med lengdetegnene og linjeskiftene blir utdataene omtrent 38 % større enn inndataene.

Uuencode i dag

Før MIME var uuencode den vanlige måten å sende programmer og bilder på via e-post og å legge dem ut på Usenet. MIME Base64 erstattet den i løpet av 1990-tallet: Uuencode hadde ingen måte å angi innholdstype på, det fantes flere inkompatible varianter, og noen av tegnsettingstegnene ble endret av gatewayer mellom ASCII- og EBCDIC-systemer, og det er grunnen til at xxencode ble laget.

Du møter fortsatt uuencode-data i e-post- og nyhetsarkiver, eldre skallskript og eldre systemer. For nytt arbeid bør du bruke Base64, eller Fil til Base64 for hele filer.

Uuencode på kommandolinjen og i Python

# Skall (GNU sharutils): inndatafil, deretter navnet til begin-linjen
uuencode photo.jpg photo.jpg > photo.uu
uudecode photo.uu

# Python: én linje på opptil 45 byte om gangen
import binascii
line = binascii.b2a_uu(b'hello', backtick=True)
binascii.a2b_uu(line)          # b'hello'

Pythons gamle modul uu ble fjernet i Python 3.13, men funksjonene i binascii finnes fortsatt.

Spesifikasjon

AlfabetASCII 32 til 96 (mellomrom til `)
UtdatastørrelseOmtrent 137 % inkludert linjeprefikser
UtfyllingLinjer på opptil 45 byte
StandardPOSIX uuencode
Skiller store og små bokstaverJa

Eksempler

Inndata (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

Ofte stilte spørsmål

Hvorfor inneholder uuencode-tekst backticks?

Verdien null ville blitt et mellomrom, og mellomrom på slutten av linjer gikk ofte tapt underveis. Mange kodere, inkludert denne, skriver en backtick i stedet. Dekoderen godtar begge.

Hva betyr begin 644?

Linjen starter den kodede blokken. 644 er Unix-tillatelsene for den gjenopprettede filen (lese og skrive for eieren, lese for alle andre), og ordet etter er filnavnet som uudecode vil opprette. Du kan angi navnet i valgene.

Kan jeg dekode uuencode uten begin-linjen?

Ja. Hvis det ikke finnes noen begin-linje, dekodes hver linje som data. Finnes det en, starter dekodingen etter den og stopper ved end-linjen, slik at tekst rundt blokken, for eksempel teksten i en e-post, hoppes over. Mellomrom på slutten av linjer som e-postprogrammer har fjernet, gjenopprettes automatisk.

Er uuencode det samme som Base64?

Nei. Begge gjør 3 byte om til 4 tegn, men uuencode bruker et annet tegnområde, et lengdetegn på hver linje og begin- og end-linjer. Base64-utdata kan ikke dekodes som uuencode, eller omvendt.