Cómo codificar con uuencode y decodificar con uudecode
Para codificar:
- Escribe o pega texto en Entrada · Texto. El bloque uuencode aparece en Salida · uuencode.
- Pon el Nombre de archivo bajo la salida; va en la línea
begin. El valor por defecto esdata.bin. - Desmarca líneas begin/end si solo necesitas las líneas codificadas, por ejemplo para incrustarlas en otro formato.
Para decodificar:
- Haz clic en uuencode → Texto en el selector de dirección.
- Pega los datos uuencode. Pueden incluir el texto del correo o de las news que los rodea; todo lo que va antes de la línea
beginse ignora. - Lee el texto en la salida, o haz clic en Guardar bytes para descargar el archivo decodificado con el nombre de la línea
begin. Si el contenido es binario, pon A en Hex para inspeccionarlo primero.
Anatomía de un archivo uuencode
Codificar el texto Cat con el nombre de archivo hello.txt da:
begin 644 hello.txt
#0V%T
`
end
begin 644 hello.txtindica los permisos Unix y el nombre del archivo.- Cada línea de datos empieza con un carácter de longitud: el número de bytes de la línea más 32.
#es 35, así que esta línea contiene 3 bytes. Una línea completa contiene 45 bytes y empieza porM, seguida de 60 caracteres. - Los caracteres de datos funcionan de forma muy parecida a Base64: cada 3 bytes se convierten en cuatro valores de 6 bits, y cada valor v se escribe como el carácter con código v + 32. El valor 0 se escribe con un acento grave (backtick) en lugar de un espacio.
- La línea con un solo backtick es una línea vacía de longitud 0, y
endcierra el bloque.
Una entrada más larga muestra la estructura de línea completa:
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
Es The quick brown fox jumps over the lazy dog. 0123456789: 45 bytes en la línea M y 10 en la línea * (42 − 32 = 10). Cada línea lleva su propia longitud y un salto de línea, así que los datos uuencode ocupan alrededor de un 38 % más que la entrada, algo más que Base64.
Dónde sigue apareciendo uuencode
Uuencode viene de Unix-to-Unix Copy (UUCP) y era la forma estándar de enviar archivos binarios por email y Usenet antes de MIME. Hoy te lo encuentras en archivos de correo antiguos, mensajes de Usenet, algunas transferencias de archivos de sistemas embebidos y mainframes, y scripts que pasan archivos a mail.
La convención del backtick viene de esa época. Algunas pasarelas quitaban los espacios finales de las líneas, lo que destruía los datos codificados con espacio para el cero; el backtick sobrevive. Este codificador escribe backticks, y el decodificador acepta ambos.
Uuencode en la línea de comandos y en Python
Con GNU sharutils instalado:
uuencode hello.txt hello.txt > hello.uu
uudecode hello.uu
El primer argumento es el archivo de entrada y el segundo es el nombre que se escribe en la línea begin. uudecode crea el archivo con ese nombre en el directorio actual. Añade -m a uuencode para obtener salida Base64.
En Python, binascii codifica una línea de hasta 45 bytes cada vez:
import binascii
binascii.b2a_uu(b"Cat", backtick=True) # b'#0V%T\n'
binascii.a2b_uu(b"#0V%T") # b'Cat'
La línea begin 644 name, la línea final con el backtick y end las tienes que añadir tú. Hay más ejemplos de codificación en la página de Python.
Problemas habituales
- Un error en la posición 1. No hay línea
beginy el texto tampoco son líneas uuencode sueltas. Comprueba que copiaste el bloque entero. - Salida sin sentido de un bloque
begin-base64. Ese bloque lo escribióuuencode -my es Base64. Copia las líneas entrebegin-base64y====en el decodificador Base64. - El archivo está truncado o tiene bytes erróneos cerca del final de las líneas. Un cliente de correo volvió a cortar las líneas o quitó los espacios finales. Cada línea de datos debe estar intacta; intenta conseguir el adjunto original o el código fuente del mensaje.
- Un mensaje en varias partes solo se decodifica a medias. Los archivos grandes se dividían a menudo en varios mensajes. Une las partes en orden, con un solo
beginy un soloend, antes de decodificar.
Preguntas frecuentes
¿Cómo soluciono uuencode: command not found?
El comando no viene instalado por defecto en la mayoría de los sistemas Linux. En Debian y Ubuntu, sudo apt install sharutils añade uuencode y uudecode; Fedora también tiene un paquete sharutils.
¿Qué significa begin 644?
644 es el modo de archivo Unix que debe recibir el archivo decodificado (lectura y escritura para el propietario, solo lectura para los demás), y la palabra que le sigue es el nombre del archivo. uudecode crea ese archivo; esta página usa el nombre para Guardar bytes.
¿Uuencode es lo mismo que Base64?
Los dos convierten 3 bytes en 4 caracteres, pero uuencode usa el rango ASCII que va del espacio al guion bajo y añade un carácter de longitud en cada línea. Base64 tiene otro alfabeto y es el que usa el email MIME. uuencode -m escribe Base64 dentro de un bloque begin-base64.
¿Python todavía puede decodificar archivos uuencode?
Sí, con binascii.a2b_uu, línea a línea. El módulo de más alto nivel uu quedó obsoleto en Python 3.11 y se eliminó en 3.13.