La comprensión y lectura de los archivos es fundamental en los entornos de software, tanto a nivel de configuración del mismo como a la hora de enviar un correo electrónico. Y no, no me refiero al idioma (que también es clave), sino a la forma en la que una app o navegador interpreta estos textos.
¿Cómo se interpretan los diversos ficheros en mi computadora?
Tienes que tener presente que los ordenadores a un nivel muy bajo (lenguaje máquina) no entienden de caracteres, sino de bytes. Por lo que todo texto que tengamos en un archivo necesita de esta conversión para ser interpretado en nuestra máquina. Podemos decir que cada carácter de nuestro texto estará formado por uno o más bytes. A este mapeo se le conoce como codificación de caracteres.
¿Qué es la codificación de caracteres?
La codificación de caracteres la podemos definir como el conjunto de asignaciones entre bytes de las computadoras y los caracteres de un conjunto de estos.
Este mecanismo será el que usará su navegador o aplicación para buscar en la fuente de los glifos y mostrar los caracteres determinados.
Al existir distintos idiomas con distintos alfabetos (algunos con más caracteres que otros) hay también diferentes formas de mapeo entre bytes y caracteres, o mejor dicho, lo que hemos conocido como codificación.
Todo comenzó con el ASCII
Como sabemos, los ordenadores los inventaron los americanos y estos se preocuparon de que las computadoras pudieran presentar textos en su idioma, algo que poco después sería un problema…
No se podían interpretar caracteres que no estuvieran en su alfabeto al no tener mapeo entre caracteres y bytes para ellos. A esta codificación establecida por los americanos se le conoce como ASCII. Esta es una codificación de 128 valores en los que cada carácter usa 7 bits.
Ante el problema de la limitación de caracteres que presentaba ASCII se optó por usar el bit resultante de los 8 bits con los que trabajan los ordenadores. Esta solución hizo que la codificación pasará de 128 a 256 valores posibles y quedarán los 128 valores nuevos de libre interpretación. De aquí surgieron multitud de codificaciones diferentes que se engloban como ASCII extendidos.
¡Stop! Llegó Unicode a poner orden
Cuando la diversificación de los ASCII extendidos se estaba yendo de las manos se decidió crear una codificación estándar para unificarlas en solo una. Así pues, se pasó a usar 2 bytes por carácter y se creó el consorcio Unicode para la definición de una lista con 65536 valores posibles.
Además, Unicode permite definir caracteres como combinaciones de otros caracteres lo que le hace tener un abanico muy amplio de combinaciones. Aún así, esta codificación ha experimentado varias ampliaciones a lo largo de sus varias versiones (la última versión, la 11.0, tiene 137374 carácteres).
UTF8, el más usado
Para codificar un carácter Unicode podemos necesitar hasta 4 bytes con 8 bits cada uno, lo que sería un total de 32 bit. Por lo que, en ese caso, un texto que tenga 10 caracteres ocupará 40 bytes. Ante esta situación se encuentra la codificación UTF32, la más simple y la que ocupa más espacio, de ahí a que sea la menos usada…
Por lo contrario, para evitar este uso de espacio, se suelen usar otras codificaciones como UTF7, UTF8 y UTF16. Como intuirás por su nombre usan 7 ,8 y 16 bits para cada carácter Unicode, algo mucho más óptimo que UTF32.
A ojos de desarrolladores y procesadores de datos, la codificación UTF8 es la más idónea para el tratamiento de caracteres ya qué baja el nivel de consumo de memoria de nuestras máquinas y motores de búsquedas. Así como también es crucial la coordinación de codificaciones entre fichero (o dato) y motor de búsqueda (navegador o base de datos) para no encontrarnos con la interpretación de caracteres de forma incorrecta.
¿Os suena lo que aparece en este fragmento de código? ya sabéis por qué sucede y la importancia del encoding.
// nombre base del jar generado se añade -version
// Configurar los directorios de código fuente adaptados a una estructura ya existente