Я пытаюсь понять всю историю того, как текст попадает на экраны. Для простоты я остаюсь с однобайтовыми кодировками (без Unicode).
на моем диске есть последовательность байтов, каждый со значением от 0 до 255. Затем я могу сказать своим компьютерным программам, какую кодировку символов они должны использовать для отображения этих байтов. Я мог бы использовать ISO-8859-1, где, например, байт со значением 0xA4-это некоторый круг с точками (¤). Или я смог переключить к ISO-8859-15, после этого моему байт со значением 0xA4 определяется как символ евро (€).
это все еще просто для понимания. Но параллельно с изменением кодировки символов я также могу изменить шрифт, чтобы определить точную форму символа. Теперь шрифт предназначен для работы с all кодировок. Таким образом, шрифт должен иметь оба символа: ¤ и €.
Итак, шаги, чтобы получить текст на моем экране, очевидно:
- читать последовательность байтов поочередно
- использовать числовое значение текущего байта для поиска в таблице кодировки символов
- Используйте [что-то] для поиска в файле шрифта, чтобы получить точную форму символа, найденного в шаге 2
- нарисовать символ, как определено в файле шрифта
в шаге 3, что это за "нечто", что используется для отображения кодировку шрифта? Делать шрифты зависят от кодировки? Итак, у шрифта есть встроенный механизм "двойного переключателя", который работает так (псевдокод)
get_symbol(code, encoding) {
switch code{
case 0xA4: switch(encoding) {
case 'ISO-8859-1' : return '¤';
case 'ISO-8859-15': return '€';
}
}
}
?
каковы детали, как получить от заданной последовательности байтов и заданной кодировки символов к фактическому символу из шрифта? Как это отображается, чтобы всегда давать правильный символ?