Capítulo 11. Conversión de datos

Tabla de contenidos

11.1. Herramientas para la conversión de información en formato texto
11.1.1. Convirtiendo un archivo de texto con iconv
11.1.2. Comprobando que un archivo es UTF-8 con iconv
11.1.3. Convirtiendo los nombres de archivos con iconv
11.1.4. Conversión EOL
11.1.5. Conversión de tabuladores
11.1.6. Editores con conversión automática
11.1.7. Extracción de texto plano
11.1.8. Resaltando y dándole formato a información en texto plano
11.2. datos XML
11.2.1. Conceptos básicos de XML
11.2.2. Procesamiento XML
11.2.3. La extracción de información XML
11.2.4. The XML data lint
11.3. Configuración tipográfica
11.3.1. composición tipográfica roff
11.3.2. TeX/LaTeX
11.3.3. Impresión de una página de manual
11.3.4. Crear una página de man
11.4. Información imprimible
11.4.1. Ghostscript
11.4.2. Mezcla de dos archivos PS o PDF
11.4.3. Utilidades de impresión
11.4.4. Imprimiendo con CUPS
11.5. La conversión de los datos de correo
11.5.1. Fundamentos de información de correo
11.6. Herramientas para información gráfica
11.7. Conversiones de información variadas

Se describen herramientas y métodos para convertir formatos de datos en el sistema Debian.

Las herramientas para formatos estándar son muy buenas pero para formatos propietarios son limitadas.

Los siguientes paquetes para la conversión de información en formato texto llamaron mi atención.


[Sugerencia] Sugerencia

iconv(1) es parte del paquete libc6 y esta siempre disponible en practicamente el cualquier sistema tipo Unix para la conversión de codificaciones de caracteres.

Puede converitr las codificaciones de los archivos de texto con iconv(1)como es muestra.

$ iconv -f encoding1 -t encoding2 input.txt >output.txt

Los valores de codificaciones para el encaje distinguen entre mayúsculas y minúsculas y pasan por alto «-» y «_». Puede obtener una relación de las codificaciones reconocidas mediante la orden «iconv -l».

Tabla 11.2. Relación de valores de codificación y su uso

valor de la codificación uso
ASCII Código Estándar Americano para el Intercambio de Información, código de 7 bits sin caracteres acentuados
UTF-8 estándar multilenguaje actual en los sistemas operativos modernos
ISO-8859-1 estándar antiguo de las lenguas occidentales, ASCII+ caracteres acentuados
ISO-8859-2 antiguo estándar de las lenguas occidentales, ASCII + caracteres acentuados
ISO-8859-15 antiguo estándar de las lenguas occidentales, ISO-8859-1 con el símbolo del euro
CP850 página de códigos 850, caracteres de Microsoft DOS con gráficos para los lenguajes de la Europa occidental, variante de ISO-8859-1
CP932 página de código 932, variante del japonés de Shift-JIS al estilo Microsoft Windows
CP936 página de códigos 936,GB2312, GBK o GB18030 variante para chino simplificado al estilo Microsoft Windows
CP949 página de código 949, EUC-KR o Código Unificado Hangul par coreano al estilo Microsoft Windows
CP950 código de página 950, Big5 variante par chino tradicional al estilo Microsoft Windows
CP1251 código de página 1251, codificación del alfabeto cirílico al estilo Microsoft Windows
CP1252 código de página 1252, ISO-8859-15 para las lenguas de Europa occidental al estilo Microsoft Windows
KOI8-R antiguo estándar ruso UNIX para el alfabeto cirílico
ISO-2022-JP estándar de codificación japones para el correo electrónico que solo utiliza códigos de 7 bit
eucJP código de 8 bit del antiguo estándar japonés de UNIX, completamente diferente de Shift-JIS
Shift-JIS Apéndice 1 para el japonés JIS X 0208 (consulte CP932)

[Nota] Nota

Some encodings are only supported for the data conversion and are not used as locale values (Sección 8.1, “Configuración regional”).

Para los conjuntos de caracteres que caben en un único byte como ASCII y ISO-8859, la códificación de caracteres es casi lo mismo que el conjunto de caracteres.

Para los conjuntos de caracteres con muchos elementos como JIS X 0213 en el japonés o Conjunto de Caracteres Universal (UCS, Unicode, ISO-10646-1) en prácticamente cualquier lenguaje, existen muchos esquemas de codificación y encajan como secuencias de bytes de datos.

En este caso existe un diferenciación clara entre el conjunto de caracteres y la códificación de caracteres

Algunos proveedores en algunos casos utilizan la página de códigos como sinónimo de la tabla de codificación de caracteres.

[Nota] Nota

Tenga en cuenta que la mayor parte de los sistemas de codificación comparten los mismos códigos con ASCII de 7 bits. Pero existen algunas excepciones. Si esta convirtiendo programas antiguos japoneses en C y datos URL de la codificación conocida como formato shift-JIS a formato UTF-8, utilice «CP932» como nombre de la codificación en lugar de «shift-JIS» para obtener los resultados correctos: 0x5C → «\» y 0x7E → «~». De otro modo serán convertidos a los caracteres incorrectos.

[Sugerencia] Sugerencia

recode(1) también puede ser usado y aporta mayor funcionalidad que la combinación de iconv(1), fromdos(1), todos(1), frommac(1) y tomac(1). Para más información, consulte «info recode».

Los editores modernos inteligentes como el programa vim son lo bastante inteligentes y trabajan bien con cualquier sistema de codificación y formato de archivo. Para mejorar la compatibilidad debería usar la configuración local UTF-8 en una consola con esta posibilidad.

Un archivo de texto Unix «u-file.txt» almacenado en la antiguo europeo occidental con la codificación latin1 (iso-8859-1) puede ser editado con vim como se muestra.

$ vim u-file.txt

Esto es debido al mecanismode autodetección de la codificación del archivo en vim que asume por defecto UTF-8 y si falla asume que será latin1.

Un antiguo archivo de text polaco en Unix, «pu-file.txt», almacenado en la codificación latin2 (iso-8859-2) puede ser editado con vim como se muestra.

$ vim '+e ++enc=latin2 pu-file.txt'

Un antiguo fichero de texto Unix en japonés, «ju-file.txt», almacenado con la codificación eucJP puede ser editado por vim como se muestra.

$ vim '+e ++enc=eucJP ju-file.txt'

Un archivo de texto MS-Windows antiguo en japonés, «jw-file.txt», almacenado con la codificación shift-JIS (concretamente: CP932) puede ser editado con vim como se muestra.

$ vim '+e ++enc=CP932 ++ff=dos jw-file.txt'

Cuando se abre un archivo con las opciones «++enc» y «++ff» , la orden de Vim «:w» lo almacena en su formato original sobreescribiendo el archivo original. También puede guardarlo con un formato y nombre de archivo específico con la orden de Vim correspondiente, p. ej. , «:w ++enc=utf8 new.txt».

Por favor para más información sobre el «soporte de texto multibyte« consulte mbyte.txt en la ayuda de vim y Tabla 11.2, “Relación de valores de codificación y su uso” para los valores de configuraciones de la ubicación utilizados por «++enc».

En los programas de la familia de emacs existen funcionalidades equivalentes a las anteriormente descritas.

Puede resaltar y dar formato a información en texto plano como se muestra.


El Lenguaje de Marcado Extensible (XML) es un lenguaje de marcado para documentos que tengan la información estructurada.

Consulte la información introductoria en XML.COM.

El código XML tiene la apariencia de HTML. Nos permite obtener diferentes formatos de un documento. Un sistema sencillo de XML es el paquete docbook-xsl, que utilizamos aquí.

Todo archivo XML comienza con una declaración estándar XML como se muestra.

<?xml version="1.0" encoding="UTF-8"?>

La sintaxis fundamental de un elemento XML se marca como se muestra.

<name attribute="value">content</name>

Un elemento XML sin contenido se marca de forma resumida como se muestra.

<name attribute="value" />

El «atributo=«valor«» de los ejemplos anteriores son opcionales.

Un comentario en XML se marca como se muestra.

<!-- comment -->

Mientras que otros añaden marcas, XML necesita cambios menores al utilizar entidades predefinidas para los siguientes caracteres.


[Atención] Atención

«<» y «&» no se pueden utilizar en los atributos y elementos.

[Nota] Nota

When SGML style user defined entities, e.g. "&some-tag;", are used, the first definition wins over others. The entity definition is expressed in "<!ENTITY some-tag "entity value">".

[Nota] Nota

Ya que las marcas XML se realizan de forma coherente con un cierto conjunto de etiquetas (y alguna información en su contenido y atributos), la conversión a otro XML es un procedimiento trivial utilizando Transformaciones del Lenguaje de Estilo Extensibles (XSLT, Extensible Stylesheet Language Transformations).

Existen muchas herramientas para procesar archivos XML como el Lenguaje de Estilos Extensible (XSL, the Extensible Stylesheet Language).

Principalmente, una vez que tenga un archivo XML bien formado, puede convertirlo en cualquier otro formato utilizando el Lenguaje de Transformación de Estilos Extensible (XSLT, Extensible Stylesheet Language Transformations .

El Lenguaje de Estilo Extensible para dar Formato a Objetos (XSL-FO, Extensible Stylesheet Language for Formatting Objects) se supone que es la solución en lo referente a dar formato. El paquete fop es nuevo en el archivo main de Debian debido a su dependencia del lenguaje de programación Java. Así que el código LaTeX se genera normalmente partiendo de XML y utilizando XSLT y el sistema LaTeX se utiliza para crear los formatos de archivo imprimibles como DVI, PostScript y PDF.


Ya que XML es un subconjunto del Lenguaje Estándar de Marcas Generalizado (SGML), puede ser procesado por cualquier herramienta para SGML, como Lenguaje de Especificación y Semantica de Documentos de Estilo (DSSSL, Document Style Semantics and Specification Language).


[Sugerencia] Sugerencia

Algunas veces es práctico leer directamente archivos XML DocBook con yelp de GNOME ya que tiene una representación de imágenes en X decente.

El programa Unix troff, creado por AT&T puede utilizarse para la composición tipográfica simple. Las páginas de man son generalmente creadas con él.

TeX fue creado por Donald Knuth y es una herramienta de composición tipográfica muy poderoso y el estándar de facto LaTeX fue creado por Leslie Lamport y permite un acceso a nivel alto a todas la potencia de TeX.


Tradicionalmente, roff es el sistema principal de Unix para la composición tipográfica. Consulte roff(7), groff(7), groff(1), grotty(1), troff(1), groff_mdoc(7), groff_man(7), groff_ms(7), groff_me(7), groff_mm(7) y «info groff».

Puede leer o imprimir un buen tutorial y texto de referencia en la macro «-me» instalando el paquete groff en el archivo «/usr/share/doc/groff/».

[Sugerencia] Sugerencia

Con «groff -Tascii -me -» se obtiene una salida en texto plano con códigos de escape ANSI. Si lo que quiere son páginas man con muchos «^H« y «_«, utilice en su lugar«GROFF_NO_SGR=1 groff -Tascii -me -».

[Sugerencia] Sugerencia

Para eliminar los «^H« y «_« del archivo de texto que groff ha generado, fíltrelo con «col -b -x».

El software TeX Live contiene un sistema completo del sistema TeX. El metapaquete texlive aporta un selección apropiada de paquetes TeX Live que cumplirá decentemente la mayor parte de las tareas.

Hay disponibles numerosas referencias a TeX y LaTeX.

  • Cómo teTeX: La Guía Local de Linux-teTeX

  • tex(1)

  • latex(1)

  • texdoc(1)

  • texdoctk(1)

  • «El libro de TeX«, de Donald E. Knuth, (Addison-Wesley)

  • «LaTeX - Un Sistema para Preparar un Documento«, de Leslie Lamport, (Addison-Wesley)

  • «El Compendio de LaTeX«, de Goossens, Mittelbach, Samarin, (Addison-Wesley)

Este es el entorno de composición tipográfica más potente. Muchos procesadores de SGML lo utilizan como motor para el procesamiento de texto. Lyx que está en el paquete lyx y GNU TeXmacs que se encuentra en el paquete texmacs ofrecen un entorno de edición LaTeX agradable WYSIWYG mientras que muchos utilizan Emacs y Vim como su preferencia como editor.

Existen multitud de recursos disponibles en la red.

Cuando los documentos se vuelven grandes, algunas veces TeX puede fallar. Debe incrementar el tamaño de los recursos compartidos en «/etc/texmf/texmf.cnf» (o más concretamente editar «/etc/texmf/texmf.d/95NonPath» y ejecutar update-texmf(8)) con el fin de solucionarlo.

[Nota] Nota

La código fuente TeX de «El Libro de TeX« esta disponible en http://tug.ctan.org/tex-archive/systems/knuth/dist/tex/texbook.tex. Este archivo contiene la mayor parte de las macros que se necesitan. Me consta que puede procesar dicho documento con tex(1) comentando las líneas de la 7 a la 10 y añadiendo «\input manmac \proofmodefalse». Le recomiendo ferviertemente comprar dicho libro (y todos los del autor Donald E. Knuth) en vez de utilizar la versión en línea aunque ¡el código fuente es un gran ejemplo de entrada de TeX!

En el sistema Debian la información imprimible se realizan en formato PostScript. El Sistema de Impresión Común de Unix (CUPS) utiliza Ghostscript como motor de representación para impresoras que no reconocen PostScript.

Puede mezclar dos archivos PostScript (PS) o Formato de Documentos Portable (PDF, Portable Document Format ) utilizando la orden gs(1) de Ghostscript.

$ gs -q -dNOPAUSE -dBATCH -sDEVICE=pswrite -sOutputFile=bla.ps -f foo1.ps foo2.ps
$ gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=bla.pdf -f foo1.pdf foo2.pdf
[Nota] Nota

El formato PDF, el cual se usa de forma habitual como un formato de impresión multiplatafoma, es en su esencia un formato PS comprimido con algunas funcionalidades y extensiones adicionales.

[Sugerencia] Sugerencia

Para la manipulación de documentos PostScript desde la línea de órdenes existen órdenes como psmerge(1) y otras que pertenecen al paquete psutils package. pdftk(1) del paquete pdftk se utiliza para la manipulación de documentos PDF.

Los siguienetes paquetes contienen utilidades para la impresión que considero importantes.


Tanto las órdenes de lp(1) y lpr(1) existen en Sistema de Impresión Común de Unix (CUPS) que proporciona opciones personalizadas para la impresión.

Puede imprimir tres copias del archivo correspondiente utilizando las siguientes órdenes.

$ lp -n 3 -o Collate=True filename
$ lpr -#3 -o Collate=True filename

Puede personalizar las impresiones mediante opciones como «-o number-up=2», «-o page-set=even», «-o page-set=odd», «-o scaling=200», «-o natural-scaling=200», etc., según consta en Impresión con línea de órdenes y sus opciones.

Considero importantes los siguientes paquetes de conversión de datos de correo.


[Sugerencia] Sugerencia

The Internet Message Access Protocol version 4 (IMAP4) server may be used to move mails out from proprietary mail systems if the mail client software can be configured to use IMAP4 server too.

Mail (SMTP) data should be limited to series of 7 bit data. So binary data and 8 bit text data are encoded into 7 bit format with the Multipurpose Internet Mail Extensions (MIME) and the selection of the charset (see Tabla 11.2, “Relación de valores de codificación y su uso”).

El formato de almacenamiento estándar de correo es mbox según RFC2822 (actualizado por el RFC822). Consulte mbox(5) (es proporcionado por el paquete mutt).

En las lenguas europeas normalmente se utiliza en el correo la «Codificación-para-Tranferir-Contenido:quoted-printable» con el juego de caracteres ISO-8859-1 ya que no existen muchos de los caracteres de 8 bits. SI el texto europeo esta codificado en UTF-8, «Codificación-para-Transferir-Contenido: quoted-printable» es usado como la mayor parte de la información en 7 bits.

En japonés el tradicional «Content-Type: text/plain; charset=ISO-2022-JP» es normalmente utilizado en el correo ya que mantiene el texto en 7 bits. Pero los antiguos sistemas Microsoft puede enviar información en Shift-JIS sin la declaración correspondiente. Si el texto japonés esta codificado en UTF-8 Base64 es como utilizar información de 8 bits. Lo que ocurre en otros lenguajes asiáticos es parecido.

[Nota] Nota

If your non-Unix mail data is accessible by a non-Debian client software which can talk to the IMAP4 server, you may be able to move them out by running your own IMAP4 server.

[Nota] Nota

Si utiliza otros formatos de almacenamiento de correo, moverlos al formato mbox es un buen comienzo. Un cliente versátil como mutt(1) puede ser útil para ello.

Puede partir el contenido del buzón de correo en mensajes utilizando procmail(1) y formail(1).

Cada mensaje de correo se puede desempaquetar utilizando munpack(1) del paquete mpack (u otra herramienta especiaizada) para obtener el contenido codificado con MIME.

Los siguientes paquetes para la conversión, edición y organización de información gráfica llamaron mi atención.

Tabla 11.17. Relación de herramientas de información gráfica

paquete popularidad tamaño palabra clave descripción
gimp V:53, I:272 19767 imagen (bitmap) GNU GIMP Programa de Manipulación de Imágenes
imagemagick I:326 176 imagen (bitmap) programa de manipulación de imágenes
graphicsmagick V:2, I:15 5445 imagen (bitmap) programas de manipulación de imágenes (bifurcaciones de imagemagick)
xsane V:13, I:148 2339 imagen (bitmap) Interfaz GTKbasado en X11 para SANE (Acceso inmediato y fácil a escáner)
netpbm V:24, I:336 8200 imagen (bitmap) herramienta de conversión de gráficos
icoutils V:9, I:65 221 png↔ico(bitmap) convierte iconos y cursores MS Windows a y desde formatos PNG (favicon.ico)
scribus V:1, I:20 30234 ps/pdf/SVG/… Scribus editor de documentos
libreoffice-draw V:84, I:408 13442 imágen (vector) LibreOffice office suite - dibujo
inkscape V:17, I:147 99316 imágen (vector) editor SVG (Scalable Vector Graphics)
dia V:2, I:25 3908 imágen (vector) editor de diagramas (Gtk)
xfig V:0, I:13 7798 imágen (vector) facilidad para la creación interactiva de figuras en X11
pstoedit V:2, I:64 1005 ps/pdf→image(vector) conversor de archivos PostScript y PDF a SVG
libwmf-bin V:7, I:155 180 Windows/imágen(vector) herramientas de conversión de archivos con formato metafile de Windows (formato de gráficos vectoriales)
fig2sxd V:0, I:0 151 fig→sxd(vector) convierte archivos XFig a formato Draw de OpenOffice.org
unpaper V:2, I:18 412 imágen→imágen herramienta para el procesado posteriro de páginas escaneadas para OCR
tesseract-ocr V:7, I:36 2135 imágen→texto software libre OCR basado en el motor OCR comercial de HP
tesseract-ocr-eng V:8, I:36 4032 imágen→texto motor de información OCR: archivo en inglés tesseact-ocr para textos ingleses
gocr V:1, I:9 545 imágen→texto software libre OCR
ocrad V:0, I:4 578 imágen→texto software libre OCR
eog V:57, I:259 7836 imágen(Exif) programa visor de gráficos «Eye of GNOME«
gthumb V:4, I:18 5395 imágen(Exif) visor y navegador de imágenes (GNOME)
geeqie V:5, I:17 15398 imágen(Exif) visor de imágenes utilizando GTK
shotwell V:15, I:233 6548 imágen(Exif) organizador de fotos digital (GNOME)
gtkam V:0, I:5 1154 imágen(Exif) aplicación para acceder a material de cámaras digitales (GTK)
gphoto2 V:0, I:10 947 imágen(Exif) El cliente de línea de órdenes de cámara digital gphoto2
gwenview V:26, I:90 11604 imágen(Exif) visor de imágenes (KDE)
kamera I:89 983 imágen(Exif) aplicaciones KDE para soporte de cámaras digitales
digikam V:2, I:11 265 imágen(Exif) aplicación para la gestión de fotos digitales para KDE
exiv2 V:2, I:32 278 imágen(Exif) herramienta de manipulación de metainformación EXIF/IPTC
exiftran V:1, I:17 70 imágen(Exif) transforma imágenes de cámaras digitales jpeg
jhead V:0, I:9 131 imágen(Exif) manipula la parte que no son imágenes de los archivos jpeg de acuerod a Exif (imágenes de cámaras digitales)
exif V:1, I:16 339 imágen(Exif) utilidad de línea de órdenes para mostrar información EXIF de archivos JPEG
exiftags V:0, I:4 292 imágen(Exif) utilidad para leer etiquetas Exif de archivos JPEG de cámaras digitales
exifprobe V:0, I:3 499 imágen(Exif) lee metainformación de imágenes digitales
dcraw V:1, I:14 583 imágen (crudo)→ppm decodifica imágenes en crudo de cámaras digitales
findimagedupes V:0, I:1 76 imagen→huella busca imágenes duplicadas o parecidas visualmente
ale V:0, I:0 839 imágen→imágen fusiona imágenes para aumentar su integridad o crea mosaicos
imageindex V:0, I:1 145 imagen(Exif)→html genera galerias HTML estáticos partiendo un grupo de imágenes
outguess V:0, I:1 230 jpeg,png herramienta universal esteanográfica
librecad V:1, I:16 8798 DXF editor de información CAD (KDE)
blender V:2, I:32 87149 blend, TIFF, VRML, … editor de animaciones 3D etc
mm3d V:0, I:0 3868 ms3d, obj, dxf, … editor OpenGL de modelado 3D
open-font-design-toolkit I:0 10 ttf, ps, … metapaquete para el diseño de tipos de letra abiertos
fontforge V:0, I:7 3980 ttf, ps, … editor de tipos de letra PS, TrueType y OpenType
xgridfit V:0, I:0 806 ttf programas para la ajuste e interpolación (gridfitting y hinting) de tipos de letra TrueType

[Sugerencia] Sugerencia

Busque más herramientras de imágenes utilizando aptitude(8) con la expresión regular «~Gworks-with::image» (consulte Sección 2.2.6, “Opciones del método de búsqueda con aptitude”).

Aunque existen programas GUI muy potentes como gimp(1), las herramientas en línea de órdenes como imagemagick(1) son muy útiles para automatizar la manipulación de imágenes por medio de archivos de órdenes.

El formato de facto de los archivos de imágenes en cámaras digitales es Formato de Archivo de Imagen Intercambiable (EXIF, Exchangeable Image File Format) que se corresponde con el formato de archivo de imágenes JPEGcon etiquetas de metainformación adicionales. Puede contener información como la fecha, la hora y la configuración de la cámara.

La patente de compresión de datos sin pérdida Lempel-Ziv-Welch (LZW) ha expirado. Las utilidades del Formato de Intercambio de Gráficos (GIF, Graphics Interchange Format), que utiliza el método de compresión LZW, están ahora disponibles libremente en el sistema Debian.

[Sugerencia] Sugerencia

Cualquier cámara digital o escáner con un medio de grabación extraible interactua con Linux a través de lectores de almacenamiento USB ya que cumple con el las reglas del Sistema de archivos para Cámaras y utiliza el sistema de archivos FAT. Consulte Sección 10.1.7, “Dispositivos de almacenamiento extraibles”.

Existen otros programas para la conversión entre datos. Los siguientes paquetes llamaron mi atención al usar aptitude(8) con la expresión regular «~Guse::converting» (consulte Sección 2.2.6, “Opciones del método de búsqueda con aptitude”).


Puede extraer la información de formato RPM como se muestra.

$ rpm2cpio file.src.rpm | cpio --extract