Uuencode e uudecode

Codifique texto, bytes em hex ou arquivos no clássico formato Unix-to-Unix, ou decodifique blocos uuencode de e-mails antigos, acervos da Usenet e scripts de volta aos dados originais.

Funciona inteiramente no seu navegador. Nada é enviado.

Como usar

  1. Escolha Codificar para criar um bloco uuencode, ou Decodificar para recuperar os dados de um bloco.
  2. Mantenha as Linhas begin / end ativadas e informe um Nome do arquivo se o resultado precisar funcionar com o comando uudecode. Desative-as para obter apenas as linhas de dados.
  3. Digite ou cole a entrada, ou abra um arquivo para codificar seus bytes.
  4. Ao decodificar, cole o bloco inteiro, incluindo a linha begin, se houver, e depois copie o resultado ou baixe-o como arquivo.

O que é uuencode?

O uuencode, abreviação de Unix-to-Unix encode, surgiu por volta de 1980, quando arquivos eram copiados entre máquinas Unix por links UUCP que só transportavam texto. Ele transforma cada 3 bytes em quatro valores de 6 bits e soma 32 a cada um, gerando caracteres imprimíveis que vão do espaço ao sublinhado. Como os sistemas de e-mail muitas vezes removiam espaços no fim das linhas, o valor zero é escrito como acento grave (`) em vez de espaço, como faz esta ferramenta.

Um arquivo uuencode tem um layout fixo:

  • Uma linha de cabeçalho begin 644 name, em que 644 é o modo de arquivo Unix em octal (o dono pode ler e gravar, todos os outros podem ler) e name é o arquivo a ser criado.
  • Linhas de dados com até 45 bytes de entrada. Cada uma começa com um caractere de comprimento (32 mais o número de bytes, então uma linha completa começa com M) seguido de até 60 caracteres codificados.
  • Uma linha com um único acento grave, que significa zero bytes, e depois a linha end.

Com os caracteres de comprimento e as quebras de linha, a saída fica cerca de 38% maior que a entrada.

O uuencode hoje

Antes do MIME, o uuencode era a forma usual de enviar programas e imagens por e-mail e de publicá-los na Usenet. O Base64 do MIME o substituiu ao longo dos anos 1990: o uuencode não tinha como declarar um tipo de conteúdo, existiam diversas variantes incompatíveis e alguns de seus caracteres de pontuação eram alterados por gateways entre sistemas ASCII e EBCDIC, motivo pelo qual o xxencode foi criado.

Você ainda encontra dados em uuencode em acervos de e-mail e de news, em scripts de shell antigos e em sistemas legados. Para trabalhos novos, use Base64, ou Arquivo para Base64 no caso de arquivos inteiros.

Uuencode na linha de comando e em Python

# Shell (GNU sharutils): arquivo de entrada e depois o nome para a linha begin
uuencode photo.jpg photo.jpg > photo.uu
uudecode photo.uu

# Python: uma linha de até 45 bytes por vez
import binascii
line = binascii.b2a_uu(b'hello', backtick=True)
binascii.a2b_uu(line)          # b'hello'

O antigo módulo uu do Python foi removido no Python 3.13, mas as funções de binascii continuam disponíveis.

Especificação

AlfabetoASCII 32 a 96 (espaço a `)
Tamanho da saídaCerca de 137%, incluindo os prefixos de linha
PreenchimentoLinhas de até 45 bytes
PadrãoPOSIX uuencode
Diferencia maiúsculas e minúsculasSim

Exemplos

Entrada (UTF-8)Saída
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

Perguntas frequentes

Por que o texto em uuencode contém acentos graves?

O valor zero corresponderia a um espaço, e espaços no fim das linhas costumavam se perder no caminho. Muitos codificadores, incluindo este, escrevem um acento grave no lugar. O decodificador aceita os dois.

O que significa begin 644?

Marca o início do bloco codificado. 644 é o modo de permissão Unix do arquivo restaurado (leitura e gravação para o dono, leitura para todos os outros), e a palavra seguinte é o nome do arquivo que o uudecode vai criar. Você pode definir o nome nas opções.

Posso decodificar uuencode sem a linha begin?

Sim. Se não houver linha begin, todas as linhas são decodificadas como dados. Se houver, a decodificação começa depois dela e para na linha end, então o texto ao redor do bloco, como o corpo de um e-mail, é ignorado. Espaços finais removidos por programas de e-mail são restaurados automaticamente.

Uuencode é o mesmo que Base64?

Não. Os dois transformam 3 bytes em 4 caracteres, mas o uuencode usa outro intervalo de caracteres, um caractere de comprimento em cada linha e linhas begin e end. Uma saída Base64 não pode ser decodificada como uuencode, nem o contrário.