Slik bruker du verktøyet
- Velg Kode for å lage en uuencode-blokk, eller Dekode for å hente dataene ut av en.
- 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.
- Skriv eller lim inn inndataene, eller åpne en fil for å kode bytene i den.
- 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
| Alfabet | ASCII 32 til 96 (mellomrom til `) |
|---|---|
| Utdatastørrelse | Omtrent 137 % inkludert linjeprefikser |
| Utfylling | Linjer på opptil 45 byte |
| Standard | POSIX uuencode |
| Skiller store og små bokstaver | Ja |
Eksempler
| Inndata (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 |
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.