Uuencode en uudecode

Codeer tekst, hex-bytes of bestanden in het klassieke Unix-to-Unix-formaat, of decodeer uu-gecodeerde blokken uit oude e-mails, Usenet-archieven en scripts terug naar de oorspronkelijke gegevens.

Werkt volledig in je browser. Er wordt niets geüpload.

Zo gebruik je het

  1. Kies Coderen om een uu-gecodeerd blok te maken, of Decoderen om de gegevens uit een blok terug te halen.
  2. Laat begin- / end-regels aan staan en vul een Bestandsnaam in als het resultaat met het commando uudecode moet werken. Zet de optie uit als je alleen de gegevensregels wilt.
  3. Typ of plak je invoer, of gebruik Bestand openen om de bytes van een bestand te coderen.
  4. Plak bij het decoderen het hele blok, inclusief de begin-regel als die er is, en kopieer daarna het resultaat of sla het met Downloaden op als bestand.

Wat is uuencode?

Uuencode, kort voor Unix-to-Unix encode, stamt uit ongeveer 1980, toen bestanden tussen Unix-machines werden gekopieerd via UUCP-verbindingen die alleen tekst konden overbrengen. Het zet elke 3 bytes om in vier 6-bitswaarden en telt bij elke waarde 32 op, wat afdrukbare tekens oplevert van de spatie tot het onderstrepingsteken. Omdat mailsystemen spaties aan het eind van een regel vaak weghaalden, wordt de waarde nul als backtick (`) geschreven in plaats van als spatie, en zo doet deze tool het ook.

Een uu-gecodeerd bestand heeft een vaste opbouw:

  • Een kopregel begin 644 name, waarbij 644 de Unix-bestandsmodus in octaal is (de eigenaar mag lezen en schrijven, alle anderen mogen lezen) en name het bestand is dat wordt aangemaakt.
  • Gegevensregels van maximaal 45 invoerbytes. Elke regel begint met een lengteteken (32 plus het aantal bytes, dus een volle regel begint met M), gevolgd door maximaal 60 gecodeerde tekens.
  • Een regel met alleen een backtick, die nul bytes betekent, en daarna de regel end.

Met de lengtetekens en regeleinden erbij is de uitvoer ongeveer 38% groter dan de invoer.

Uuencode vandaag

Vóór MIME was uuencode de gebruikelijke manier om programma's en afbeeldingen per e-mail te versturen en op Usenet te plaatsen. In de jaren negentig nam MIME-Base64 het over: uuencode kon geen inhoudstype aangeven, er bestonden meerdere onderling incompatibele varianten, en sommige leestekens werden door gateways tussen ASCII- en EBCDIC-systemen veranderd. Daarom is xxencode ontstaan.

Je komt uu-gecodeerde gegevens nog tegen in mail- en nieuwsarchieven, oudere shellscripts en legacysystemen. Gebruik voor nieuw werk Base64, of Bestand naar Base64 voor complete bestanden.

Uuencode op de opdrachtregel en in Python

# Shell (GNU sharutils): invoerbestand, daarna de naam voor de begin-regel
uuencode photo.jpg photo.jpg > photo.uu
uudecode photo.uu

# Python: telkens één regel van maximaal 45 bytes
import binascii
line = binascii.b2a_uu(b'hello', backtick=True)
binascii.a2b_uu(line)          # b'hello'

De oude module uu van Python is in Python 3.13 verwijderd, maar de functies in binascii bestaan nog.

Specificatie

AlfabetASCII 32 tot 96 (spatie tot `)
UitvoergrootteOngeveer 137%, inclusief lengteteken per regel
OpvullingRegels van maximaal 45 bytes
StandaardPOSIX uuencode
HoofdlettergevoeligJa

Voorbeelden

Invoer (UTF-8)Uitvoer
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

Veelgestelde vragen

Waarom staan er backticks in uu-gecodeerde tekst?

De waarde nul zou een spatie opleveren, en spaties aan het eind van een regel gingen onderweg vaak verloren. Veel encoders, waaronder deze, schrijven daarom een backtick. De decoder accepteert beide.

Wat betekent begin 644?

Daarmee begint het gecodeerde blok. 644 is de Unix-toegangsmodus voor het herstelde bestand (lezen en schrijven voor de eigenaar, lezen voor alle anderen), en het woord daarna is de bestandsnaam die uudecode aanmaakt. Je kunt de naam instellen bij de optie Bestandsnaam.

Kan ik uuencode decoderen zonder begin-regel?

Ja. Is er geen begin-regel, dan wordt elke regel als gegevens gedecodeerd. Is die er wel, dan begint het decoderen daarna en stopt het bij de end-regel, zodat tekst rond het blok, zoals de tekst van een e-mail, wordt overgeslagen. Spaties aan het regeleinde die door mailsoftware zijn verwijderd, worden automatisch hersteld.

Is uuencode hetzelfde als Base64?

Nee. Beide zetten 3 bytes om in 4 tekens, maar uuencode gebruikt een ander tekenbereik, een lengteteken op elke regel en begin- en end-regels. Base64-uitvoer kan niet als uuencode worden gedecodeerd, en andersom ook niet.