Estoy tratando de entender la historia completa de cómo el texto llega a las pantallas. Para mantener las cosas simples, me quedo con codificaciones de un solo byte (sin Unicode).
En mi disco hay una secuencia de bytes, cada uno con un valor entre 0 y 255. Luego puedo decirle a mis programas de computadora qué codificación de caracteres deben usar para mostrar estos bytes. Podría usar ISO-8859-1 donde, por ejemplo, el byte con valor 0xA4 es un círculo con puntos (¤). O podría cambiar a ISO-8859-15, luego mi byte con valor 0xA4 se define como el símbolo del euro (€).
Todo esto es aún simple de entender. Pero paralelamente a cambiar la codificación de caracteres, también puedo cambiar la fuente para definir la forma exacta de un símbolo. Ahora, una fuente debe funcionar con todas las codificaciones de caracteres. Entonces, una fuente debe tener ambos símbolos: ¤ y €.
Entonces, los pasos para obtener un texto en mi pantalla son obviamente:
- Leer secuencia de bytes en serie
- Use el valor numérico del byte actual para buscar en la tabla de codificación de caracteres
- Use [algo] para buscar en el archivo de fuente para obtener la forma exacta del símbolo que se encuentra en el paso 2
- Dibuje el símbolo como se define en el archivo de fuente
En el paso 3, ¿qué es este "algo" que se utiliza para asignar la codificación de caracteres a la fuente? ¿Los archivos de fuentes dependen de la codificación de caracteres? Entonces, ¿una fuente tiene algún mecanismo de "doble interruptor" incorporado que funciona como (pseudocódigo)
get_symbol(code, encoding) {
switch code{
case 0xA4: switch(encoding) {
case 'ISO-8859-1' : return '¤';
case 'ISO-8859-15': return '€';
}
}
}
?
¿Cuáles son los detalles de cómo obtener de una secuencia de bytes dada y una codificación de caracteres dada al símbolo real de la fuente? ¿Cómo se asigna esto para dar siempre el símbolo correcto?