Como usar
- Escolha Codificar para criar um bloco uuencode, ou Decodificar para recuperar os dados de um bloco.
- 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.
- Digite ou cole a entrada, ou abra um arquivo para codificar seus bytes.
- 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
| Alfabeto | ASCII 32 a 96 (espaço a `) |
|---|---|
| Tamanho da saída | Cerca de 137%, incluindo os prefixos de linha |
| Preenchimento | Linhas de até 45 bytes |
| Padrão | POSIX uuencode |
| Diferencia maiúsculas e minúsculas | Sim |
Exemplos
| Entrada (UTF-8) | Saída |
|---|---|
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 |
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.