iconv en Linux: Convertir Codificación de Archivos (UTF-8, ISO-8859 y más)
El comando iconv en Linux puede usarse para convertir diferentes tipos de archivos a codificaciones diferentes.
Las opciones más comunes son:
- -l: Lista todos los formatos soportados;
- -f: Establece el formato de entrada de los datos;
- -t: Establece el formato de salida de los datos;
- -o: Archivo de salida.
Ejemplos:
En este ejemplo iconv convertirá archivo1.txt a salida.txt, convirtiendo los caracteres de la codificación ISO-8859-1 usada generalmente en Windows al formato UTF-8:
$ iconv -f ISO-8859-1 -t UTF-8 –o saída.txt arquivo1.txt
La opción -l muestra todos los formatos de codificación soportados por iconv:
$ iconv -l 437, 500, 500V1, 850, 851, 852, 855, 856, 857, 858, 860, 861, 862, 863, 864, 865, 866, 866NAV, 869, 874, 904, 1026, 1046, 1047, 8859_1, 8859_2, 8859_3
( ... )
Estándares de Caracteres
Como todo sistema operativo, Linux necesita trabajar con varios mapas de caracteres, para cubrir varios idiomas y formatos de caracteres.
Para hacer esto, se conventó el uso de "Mapas de Caracteres", que mapean un carácter de un determinado alfabeto en una secuencia de bits, que van a componer esos caracteres.
Estos mapas de caracteres son una convención utilizada en todo el mundo por diversos sistemas computacionales, y por eso, fueron etiquetados con nombres y números, para que la conversión de los bits de los archivos sea posible, en el lenguaje y caracteres correctos. Esto también posibilita la conversión de los caracteres de un mapa a otro, a veces con cierta pérdida de datos.
A continuación una breve descripción de los mapas de caracteres más utilizados.
ASCII
ASCII es un acrónimo para American Standard Code for Information Interchange, que en español significa "Código Estándar Americano para el Intercambio de Información". Este estándar es una codificación de caracteres de siete bits basada en el alfabeto inglés.
Los códigos ASCII representan texto en computadoras, equipos de comunicación, entre otros dispositivos que trabajan con texto. El ASCII fue desarrollado para uso de telégrafos en 1960 que usaban impresoras de 7 bits. Gran parte de las codificaciones de caracteres modernas la heredó como base.
La codificación define 128 caracteres, llenando completamente los siete bits disponibles. De estos, 33 no son imprimibles, como caracteres de control actualmente obsoletos, que afectan el procesamiento del texto. Excepto por el carácter de espacio, el resto está compuesto por caracteres imprimibles.
Tabla ASCII |
ISO-8859
La mayoría de los 95 caracteres imprimibles del ASCII son suficientes para el intercambio de información cuando se trata de datos escritos en inglés. Sin embargo, otros idiomas latinos y orientales necesitan símbolos para representar los caracteres que no son cubiertos por el ASCII, como las letras acentuadas y otros caracteres.
El estándar ISO-8859 resolvió este problema utilizando una codificación de 8 bits, possibilitando 128 codificaciones adicionales además de las 128 existentes en el ASCII.
Incluso con 128 símbolos adicionales, el ISO-8859 no contenía todos los caracteres especiales que el alemán, español, portugués, sueco, húngaro, entre otros idiomas necesitaban. De esta forma, crearon diferentes mapas de caracteres que forman parte del ISO-8859, a continuación:
- ISO-8859-1 – Latin-1: Caracteres latinos del oeste europeo. Es el más usado, ya que cubre el inglés, alemán, francés, italiano, portugués, español y otros idiomas de la región oeste de Europa;
- ISO-8859-2 – Latin-2: Caracteres de Europa central y este, como polaco, esloveno, serbio, húngaro, etc.;
- ISO-8859-3 – Latin-3: Caracteres del sur de Europa, como turco, y también el esperanto;
- ISO-8859-4 – Latin-4: Caracteres del norte de Europa, como estonio, lituano, entre otros;
- ISO-8859-5 – Latin/Cyrillic: Caracteres usados en Rusia y Ucrania;
- ISO-8859-6 – Latin/Arabic: Caracteres árabes;
- ISO-8859-7 – Latin/Greek: Caracteres griegos;
- ISO-8859-8 – Latin/Hebrew: Caracteres hebreos;
- ISO-8859-9 – Latin-5: Caracteres turcos;
- ISO-8859-10 – Latin-6: Usados en idiomas bálticos;
- ISO-8859-11 – Latin/Thai: Usados en idiomas tailandeses;
- ISO-8859-12 – Latin/Devanagari: Usados en devanágari;
- ISO-8859-13 – Latin-7: Adicionó algunos caracteres que quedaron faltando en Latin-4 y Latin-6;
- ISO-8859-14 – Latin-8: Caracteres celtas;
- ISO-8859-15 – Latin-9: Revisión del Latin-1, removiendo algunos símbolos poco usados y agregando otros;
- ISO-8859-16 – Latin-10: Usados en el sudeste europeo para albanés, croata, húngaro, italiano, polaco, rumano y esloveno, pero también finlandés, francés, alemán y gaélico irlandés (nueva ortografía). El enfoque está más en letras de símbolos. El signo de moneda es sustituido con el símbolo del euro.
UNICODE
Unicode es un estándar que permite a las computadoras representar y manipular, de forma consistente, texto de cualquier sistema de escritura existente.
El estándar consiste en un repertorio de cerca de cien mil caracteres, un conjunto de diagramas de códigos para referencia visual, una metodología para codificación y un conjunto de codificaciones estándar de caracteres, una enumeración de propiedades de caracteres como mayúsculas y minúsculas, un conjunto de archivos de computadora con datos de referencia, además de reglas para normalización, descomposición, ordenamiento alfabético y renderización.
El Unicode está compuesto de esquemas estandarizados de transformación Unicode llamados Unicode Transformation Format, o UTF.
Su éxito en unificar conjuntos de caracteres llevó a un uso amplio y predominante en la internacionalización y localización de programas de computadora. El estándar fue implementado (lea sobre deploy) en varias tecnologías recientes, incluyendo XML, Java y sistemas operativos modernos.
Unicode tiene el objetivo explícito de trascender las limitaciones de codificaciones de caracteres tradicionales, como las definidas por el estándar ISO 8859, que tienen gran uso en varios países, pero que permanecen en su mayoría incompatibles entre sí.
UTF-8 (8-bit Unicode Transformation Format) es un tipo de codificación Unicode de longitud variable creado por Ken Thompson y Rob Pike.
Puede representar cualquier carácter universal estándar del Unicode, siendo también compatible con el ASCII. Por esta razón, es adoptado como tipo de codificación estándar universal para email, páginas web y otros lugares.
La "Internet Engineering Task Force" (IETF) requiere que todos los protocolos utilizados en Internet soporten, al menos, UTF-8.
Aprenda mucho más sobre Linux en nuestro curso en línea. Puede realizar la inscripción aquí. Si ya tiene una cuenta, o quiere crear una, simplemente inicie sesión o cree su usuario aquí.
¿Le gustó? Comparta
Eso fue solo una pieza. El curso enseña el camino completo — desde tu primer comando hasta el día del examen.
Tabla ASCII