stringtranslate.com

codificación uu

uuencoding es una forma de codificación de binario a texto que se originó en los programas Unix uuencode y uudecode escritos por Mary Ann Horton en la Universidad de California, Berkeley en 1980, [1] para codificar datos binarios para su transmisión en sistemas de correo electrónico .

El nombre "uuencoding" se deriva de Copia de Unix a Unix , es decir, "codificación de Unix a Unix" es una codificación segura para la transferencia de archivos arbitrarios de un sistema Unix a otro sistema Unix, pero sin garantía de que los enlaces intermedios se realicen. todos serán sistemas Unix. Dado que un mensaje de correo electrónico puede reenviarse a través de computadoras con diferentes conjuntos de caracteres o mediante transportes que no son limpios de 8 bits , o manejados por programas que no son limpios de 8 bits, reenviar un archivo binario por correo electrónico puede dañarlo. . Al codificar dichos datos en un subconjunto de caracteres común a la mayoría de los conjuntos de caracteres, era poco probable que la forma codificada de dichos archivos de datos se "tradujera" o se corrompiera y, por lo tanto, llegaría intacta y sin cambios al destino. El programa uudecode invierte el efecto de uuencode , recreando exactamente el archivo binario original. uuencode/decode se hizo popular para enviar archivos binarios (y especialmente comprimidos) por correo electrónico y publicarlos en grupos de noticias de Usenet , etc.

Ahora ha sido reemplazado en gran medida por MIME y yEnc . Con MIME, los archivos que podrían haber sido codificados sin codificación se transfieren con codificación Base64 .

formato codificado

Un archivo codificado sin formato comienza con una línea de encabezado del formulario:

comenzar <modo> <archivo><nueva línea>

<mode>son los permisos de archivo Unix del archivo como tres dígitos octales (por ejemplo, 644, 744). Por lo general, esto sólo es importante para los sistemas operativos tipo Unix .

<file>es el nombre del archivo que se utilizará al recrear los datos binarios.

<newline>significa un carácter de nueva línea , utilizado para terminar cada línea.

Cada línea de datos utiliza el formato:

<carácter de longitud><caracteres formateados><nueva línea>

<length character>es un carácter que indica el número de bytes de datos que se han codificado en esa línea. Este es un carácter ASCII determinado sumando 32 al recuento de bytes real, con la única excepción de un acento grave "`" (código ASCII 96) que significa cero bytes. Todas las líneas de datos, excepto la última (si la longitud de los datos no era divisible por 45), tienen 45 bytes de datos codificados (60 caracteres después de la codificación). Por lo tanto, la gran mayoría de los valores de longitud son 'M' (32 + 45 = código ASCII 77 o "M").

<formatted characters>Son caracteres codificados. Consulte § Mecanismo de formato para obtener más detalles sobre la implementación real.

El archivo termina con dos líneas:

`<nueva línea>fin<nueva línea>

La penúltima línea también es un carácter que indica la longitud de la línea, y el acento grave significa cero bytes.

Como archivo completo, la salida codificada en formato uu para un archivo de texto sin formato llamado cat.txt que contenga solo los caracteres Cat sería

comenzar 644 cat.txt#0V%T`fin

La línea de inicio es un encabezado uuencode estándar; el '#' indica que su línea codifica tres caracteres; las dos últimas líneas aparecen al final de todos los archivos codificados sin formato.

Mecanismo de formato

El mecanismo de uuencodingrepite lo siguiente cada 3 bytes, codificándolos en 4 caracteres imprimibles, cada carácter representa un dígito numérico de base 64 :

  1. Comience con 3 bytes de la fuente, 24 bits en total.
  2. Dividido en 4 agrupaciones de 6 bits, cada una de las cuales representa un valor en el rango de 0 a 63: bits (00-05), (06-11), (12-17) y (18-23).
  3. Suma 32 a cada uno de los valores. Con la suma de 32 esto significa que los resultados posibles pueden estar entre 32 (" " espacio) y 95 ("_" subrayado ). 96 ("`" acento grave ) como "carácter especial" es una extensión lógica de este rango. A pesar de que el carácter de espacio está documentado como la codificación del valor 0, las implementaciones, como GNU sharutils, [2] en realidad también usan el carácter de acento grave para codificar ceros en el cuerpo del archivo, sin usar nunca el espacio.
  4. Genere el equivalente ASCII de estos números.

Si la longitud de la fuente no es divisible por 3, entonces la última sección de 4 bytes contendrá bytes de relleno para que sea claramente divisible. Estos bytes se restan de los de la línea <length character>para que el decodificador no agregue caracteres no deseados al archivo.

uudecodinges el reverso de lo anterior, resta 32 del código ASCII de cada carácter ( módulo 64 para tener en cuenta el uso del acento grave) para obtener un valor de 6 bits, concatena 4 grupos de 6 bits para obtener 24 bits y luego genera 3 bytes.

El proceso de codificación se demuestra en esta tabla, que muestra la derivación de la codificación anterior para "Cat".

tabla de código uuen

La siguiente tabla muestra la conversión del valor decimal de los campos de 6 bits obtenidos durante el proceso de conversión y su correspondiente código y carácter de salida de caracteres ASCII.

Tenga en cuenta que algunos codificadores pueden producir espacios (código 32) en lugar de un acento grave ("`", código 96), mientras que algunos decodificadores pueden negarse a decodificar datos que contienen espacios.

Ejemplo

El siguiente es un ejemplo de codificación uu de un archivo de texto de una línea. En este ejemplo, %0D es la representación en bytes para el retorno de carro y %0A es la representación en bytes para el avance de línea .

archivo
Nombre de archivo = wikipedia-url.txtContenido del archivo = http://www.wikipedia.org%0D%0A
codificación uu
comenzar 644 wikipedia-url.txt::'1T<#HO+W=W=RYW:6MI<&5D:6$N;W)G#0H``fin

Forks (archivo, recurso)

Unix tradicionalmente tiene una única bifurcación donde se almacenan los datos de los archivos. Sin embargo, algunos sistemas de archivos admiten múltiples bifurcaciones asociadas con un solo archivo. Por ejemplo, el sistema de archivos jerárquico (HFS) clásico de Mac OS admitía una bifurcación de datos y una bifurcación de recursos . Mac OS HFS+ admite múltiples bifurcaciones, al igual que los flujos de datos alternativos NTFS de Microsoft Windows . La mayoría de las herramientas de uucoding solo manejarán datos de la bifurcación de datos principal, lo que puede resultar en una pérdida de información al codificar/decodificar (por ejemplo, los comentarios de archivos NTFS de Windows se guardan en una bifurcación diferente). Algunas herramientas (como la aplicación clásica de Mac OS UUTool ) resolvieron el problema concatenando las diferentes bifurcaciones en un archivo y diferenciándolas por nombre de archivo.

Relación con xxencode, Base64 y Ascii85

A pesar de su gama limitada de caracteres, los datos no codificados a veces se corrompen al pasar por ciertas computadoras que utilizan conjuntos de caracteres que no son ASCII, como EBCDIC . Un intento de resolver el problema fue el formato xxencode, que utilizaba sólo caracteres alfanuméricos y los símbolos más y menos. Más común hoy en día es el formato Base64, que se basa en el mismo concepto de alfanumérico , solo que en contraposición a ASCII 32–95. Los tres formatos utilizan 6 bits (64 caracteres diferentes) para representar sus datos de entrada.

Base64 también puede ser generado por el programa uuencode y tiene un formato similar, excepto por la traducción de caracteres real:

El encabezado se cambia a

comenzar-base64 <modo> <archivo>

el trailer se convierte

====

y las líneas intermedias están codificadas con caracteres elegidos entre

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/

Otra alternativa es Ascii85 , que codifica cuatro caracteres binarios en cinco caracteres ASCII. Ascii85 se utiliza en formatos PostScript y PDF .

Desventajas

uuencoding toma 3 bytes preformateados y los convierte en 4 y también agrega etiquetas de inicio/fin, nombres de archivos y delimitadores . Esto agrega al menos un 33% de sobrecarga de datos en comparación con la fuente sola, aunque esto puede compensarse al menos en cierta medida comprimiendo el archivo antes de codificarlo.

Soporte en idiomas

Pitón

El lenguaje Python admite la codificación uu utilizando el módulo de códecs con el códec "uu":

Para Python 2 (obsoleto/desactivado a partir del 1 de enero de 2020) :

$ python  -c 'imprimir "Cat".encode("uu")' comienza 666 <datos> # 0V%T final $

Para Python 3, donde el módulo de códecs debe importarse y usarse directamente :

$ python3  -c "desde códecs importar codificación; imprimir(encode(b'Cat', 'uu'))" b'begin 666 <datos>\n#0V%T\n \nend\n' $ 

Para decodificar, pase el archivo completo:

$ python3  -c "desde códecs importar decodificar; imprimir (decodificar (b'begin 666 <datos>\n#0V%T\n \nend\n', 'uu'))" b'Cat' 

perla

El lenguaje Perl admite la codificación uuencoding de forma nativa utilizando los operadores pack() y unpack() con la cadena de formato "u":

$ perl  -e 'imprimir paquete("u","Cat")' # 0V%T 

La decodificación de base64 con unpack también se puede lograr traduciendo los caracteres:

$ perl  -e 'imprimir desempaquetar("u","#0V%T")' Gato 

Para producir archivos uuencode bien formados, necesita usar módulos, [3] o un poco más de código: [4]

Codificar (oneliner)

$ perl  -ple 'BEGIN{use File::Basename;$/=undef;$sn=basename($ARGV[0]);} $_= "comenzar 600 $sn\n".(paquete "u", $ _)."`\nend" si $_' /some/file/to_encode.gz  

Codificar/Decodificar (scripts Perl adecuados)

https://metacpan.org/dist/PerlPowerTools/view/bin/uuencode

https://metacpan.org/dist/PerlPowerTools/view/bin/uudecode

Ver también

Referencias

  1. ^ Horton, marca. "Manual del programador de UNIX UUENCODE (1C)". La sociedad del patrimonio de Unix . Consultado el 10 de noviembre de 2020 .
  2. ^ "fuente uuencode.c". fossies.org . Consultado el 5 de junio de 2021 .
  3. ^ "Fuente de PerlPowerTools". metacpan.org . Consultado el 12 de febrero de 2024 .
  4. ^ "fuente uuencode.pl". main.linuxfocus.org . Consultado el 12 de febrero de 2024 .

enlaces externos