Como fazer uuencode e uudecode
Para codificar:
- Digite ou cole o texto em Entrada · Texto. O bloco uuencode aparece em Saída · uuencode.
- Defina o Nome do arquivo abaixo da saída; ele vai para a linha
begin. O padrão édata.bin. - Desmarque linhas begin/end se você precisa só das linhas codificadas, por exemplo para embuti-las em outro formato.
Para decodificar:
- Clique em uuencode → Texto no seletor de direção.
- Cole os dados em uuencode. Eles podem incluir o texto do e-mail ou da mensagem de news ao redor; tudo o que vem antes da linha
beginé ignorado. - Leia o texto na saída, ou clique em Salvar bytes para baixar o arquivo decodificado com o nome da linha
begin. Para conteúdo binário, ajuste Para em Hex para inspecioná-lo antes.
Anatomia de um arquivo uuencode
Codificar o texto Cat com o nome de arquivo hello.txt gera:
begin 644 hello.txt
#0V%T
`
end
begin 644 hello.txttraz as permissões Unix e o nome do arquivo.- Cada linha de dados começa com um caractere de comprimento: o número de bytes da linha mais 32.
#é 35, então esta linha tem 3 bytes. Uma linha cheia tem 45 bytes e começa comM, seguida de 60 caracteres. - Os caracteres de dados funcionam de modo muito parecido com o Base64: cada 3 bytes viram quatro valores de 6 bits, e cada valor v é escrito como o caractere de código v + 32. O valor 0 é escrito como crase em vez de espaço.
- A linha com uma única crase é uma linha vazia de comprimento 0, e
endfecha o bloco.
Uma entrada mais longa mostra a estrutura de linha cheia:
begin 644 fox.txt
M5&AE('%U:6-K(&)R;W=N(&9O>"!J=6UP<R!O=F5R('1H92!L87IY(&1O9RX@
*,#$R,S0U-C<X.0``
`
end
Isso é The quick brown fox jumps over the lazy dog. 0123456789: 45 bytes na linha M e 10 na linha * (42 − 32 = 10). Cada linha carrega o próprio comprimento mais uma quebra de linha, então os dados em uuencode ficam cerca de 38% maiores que a entrada, um pouco mais que no Base64.
Onde o uuencode ainda aparece
O uuencode vem do Unix-to-Unix Copy (UUCP) e era o jeito padrão de enviar arquivos binários por e-mail e Usenet antes do MIME. Hoje você o encontra em arquivos antigos de e-mail, posts da Usenet, algumas transferências de arquivos em sistemas embarcados e mainframes, e em scripts que passam arquivos para o mail.
A convenção da crase vem daquela época. Alguns gateways removiam espaços no fim das linhas, o que destruía dados codificados com espaço para o zero; a crase sobrevive. Este codificador escreve crases, e o decodificador aceita as duas formas.
Uuencode na linha de comando e em Python
Com o GNU sharutils instalado:
uuencode hello.txt hello.txt > hello.uu
uudecode hello.uu
O primeiro argumento é o arquivo de entrada e o segundo é o nome escrito na linha begin. O uudecode cria o arquivo com esse nome no diretório atual. Adicione -m ao uuencode para obter saída em Base64.
Em Python, o binascii codifica uma linha de até 45 bytes por vez:
import binascii
binascii.b2a_uu(b"Cat", backtick=True) # b'#0V%T\n'
binascii.a2b_uu(b"#0V%T") # b'Cat'
Acrescente você mesmo a linha begin 644 name, a linha final com crase e o end. Mais exemplos de codificação na página de Python.
Problemas comuns
- Um erro na posição 1. Não há linha
begine o texto também não é formado por linhas uuencode puras. Confira se você copiou o bloco inteiro. - Saída sem sentido a partir de um bloco
begin-base64. Esse bloco foi escrito poruuencode -me é Base64. Copie as linhas entrebegin-base64e====para o decodificador Base64. - O arquivo está truncado ou tem bytes errados perto do fim das linhas. Um cliente de e-mail quebrou as linhas de novo ou removeu espaços no final. Cada linha de dados precisa estar intacta; tente obter o anexo original ou o código-fonte da mensagem.
- Um post em várias partes só decodifica em parte. Arquivos grandes costumavam ser divididos em várias mensagens. Junte as partes em ordem, mantendo um único
begine um únicoend, antes de decodificar.
Perguntas frequentes
Como resolver uuencode: command not found?
O comando não vem instalado por padrão na maioria dos sistemas Linux. No Debian e no Ubuntu, sudo apt install sharutils adiciona uuencode e uudecode; o Fedora também tem um pacote sharutils.
O que significa begin 644?
644 é o modo de arquivo Unix que o arquivo decodificado deve receber (leitura e escrita para o dono, leitura para todos os outros), e a palavra seguinte é o nome do arquivo. O uudecode cria esse arquivo; esta página usa o nome em Salvar bytes.
Uuencode é a mesma coisa que Base64?
Os dois transformam 3 bytes em 4 caracteres, mas o uuencode usa a faixa ASCII do espaço ao sublinhado e acrescenta um caractere de comprimento por linha. O Base64 tem outro alfabeto e é o que o e-mail MIME usa. uuencode -m escreve Base64 dentro de um bloco begin-base64.
O Python ainda decodifica arquivos uuencode?
Sim, com binascii.a2b_uu, uma linha por vez. O módulo de alto nível uu foi descontinuado no Python 3.11 e removido no 3.13.