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