Начнем с базового вопроса: как можно представить национальный язык в компьютере? Важно различать три понятия: алфавит, кодирование алфавита и конкретное представление кодировки.
Дальше слово кодировка будет обозначать и кодировку и представление. Там где из контекста не будет понятно что имеется ввиду слово будет уточняться.
Рассмотрим эволюцию не-unicode представлений кодировок.
ASCII кодировка. Символы уложились в диапазон 0-127 (7 бит). Восьмой бит планировался как бит четности.
Бит четности скоро перестал быть важен и стал использоваться для национальных алфавитов. Европейские страны засунули в диапазон 128-255 свои символы с акцентами (ISO Latin charset, она же Windows-1252), Россия (СССР) использовала этот же диапазон для кириллицы (традиционно было предложено несколько несовместимых кодировок: ГОСТ, альтернативная 866, KOI-8R, а победила, естественно, кодировка от Microsoft Windows-1251).
Страны, которым не хватало 128 дополнительных символов (азиатские страны со слоговым и иероглифическим письмом), придумали мультибайтовую кодировку. В отличии от предыдущих кодировок, где было соответствие один символ - один байт, мультибайтовые кодировки могли кодировать символ в нескольких байтах. Обычные символы из
ASCII кодировались одним символом, а некоторые коды из старшей половины использовались как стартовые символы для двух-трех байтовых символов. До мультибайтовых кодировок все было просто: 5 байт - 5 символов. Теперь для подсчета числа символов нужно было просканировать строку. Понятно, что ожидать от европейского (и русского) программиста корректной работы с мультибайтовыми символами практически невозможно. Разве что по случайности.
Как можно правильно распознать поток байт как текст? Было введено понятие кодовой страницы, codepage. Текущая кодовая страница указывала на способ распознавания символов. Так, Словоед, используя переключение кодовой страницы в Пилоке, способен выводить и русские буквы и немецкие умляуты.
Теперь мы можем сформулировать принцип работы PalmOS с текстами: PalmOS поддерживает в качестве текущей мультибайтовую (как частный вид - однобайтовую) кодировку. Начиная с 4 версии, PalmOS упрощает поддержку национальной кодировки.
Чем плохи мультибайтовые кодировки? Тем, что для одновременного использования различных национальных алфавитов требуется внешний механизм переключения кодировок (кодовой страницы). Стандарт Unicode включает кодовую страницу в код каждого символа. Тем самым упрощается совместное использование разных языков, но существенно увеличивается размер кода символа.
UTF-16 использует 2 байта для представления каждого символа. При этом unicode символы большие чем 0x10FFFF (кто бы сказал что там за символы?) в этом представлении использовать нельзя. Подробности здесь ftp://ftp.rfc-editor.org/in-notes/rfc2781.txt .
UTF-8 пользуется тем, что кодовая страница 0 совпадает с ASCII. При этом ASCII-символы представлены одним байтом, а остальные кодируются аналогично мультибайтовым кодировкам (при этом сложность работы с русским приравнена к сложности работы с восточными языками. ха-ха.). Подробности здесь ftp://ftp.rfc-editor.org/in-notes/std/std63.txt .
Чем неудобен unicode для русского языка на пальме?
Во-первых в
PalmOS существует только одна функция, которая понимает юникод и преобразовывает его в мультибайтовую родную кодировку. Мало довода?
Во-вторых русификатор должен правильно настроить функции преобразования. На голой машине эти преобразования будут заведомо неверными.
В-третьих редкая программа, которая обрабатывает поток текста озабачивается настраиваемым списком понимаемых кодировок.
В-четвертых вменяемый европейский программист просто будет рассматривать UTF-8 как
ASCII, а в UTF-16 будет просто выкидывать старший байт. Их можно понять
.