Главная

O кодировках, клавиатурах, шрифтах и прочее. (Чайникам - от чайника.)

Как заставить BeOS правильно показывать русские и другие варварские буквы, где скачать правильные шрифты и не только…

Изложено в тысяче других мест, но уж слишком часто на форумах задают вопросы на эти темы, а ответы на них будут малополезны, если немного не разобраться в подноготной.

Итак. С самого начала.

1) Буквы хранятся в памяти компьютера в виде чисел. При отображении на экран по этому числу–номеру выбирается (согласно специальной таблице) контур нужного символа. Надо отметить, что когда нажимается клавиша на клавиатуре — в компьютер попадает изначально совсем даже не код–номер соответствующей буквы — а некое другое число, состояние клавиатуры, или, по–научному, скан–код.

И только специальная программа–драйвер решает, что передавать дальше другим программам вместо этого скан–кода (это — к следующим пояснениям о переключателях языков на клавиатуре).

2) Исторически первым настоящим СТАНДАРТОМ соглашения о соответствии символов и чисел в памяти компьютера стал ASCII. В нем для хранения информации о коде символа предполагалось 7 бит. То–есть помещались числа от 0 до 127. Значит можно было представить столько же символов. Сюда помещались латинские маленькие и большие буквы, цифры, знаки препинания и некоторые специальные символы. Все. Никаких тебе русских и прочих варварских языков.
Потом стали использовать 8 бит. Появилось еще 128 позиций.

И вот тут–то пошел разнобой. Практически каждый размещал в этом пространстве что и как хотел. Таковы например русские кодировки KOI8, CP1251, CP866, МАС, ISO -8859–5, ISO-IR–111. А на моей памяти старого ламера еще и U–code, DKOI и прочая экзотика. Соответственно — в других странах на этом же месте никакими
русскими буквами и не пахнет. Даже для алфавитов из группы Western умудрились создать немалое количество несовпадающих кодировок.

3) Теперь о шрифтах. В ранних шрифтах, как встроенных в микросхемы знакогенераторы, так и софтовых, извлекаемых с диска и оперативной памяти,, все было просто. Описания изображений символов(глифов, по–научному) располагались в том же порядке, что и коды букв в кодировке, для которой (и только для которой) этот шрифт был предназначен.

Таковы, например, шрифты для Win 3.1. В общем, какое–то время так обходились, но как–то вся компьютерная жизнь становилась все более (между)народной и жить становилось все тяжелей.

4) Ситуация изменилась — и усложнилась и упростилась одновременно — с появлением стандарта Unicode и соответствующих шрифтов:

a) Unicode. Изложение примерное — прошу заранее извинить за чайниковские неточности. Считается, что на кодирование символов отведено 16 бит, то есть можно обозначить около 0xFFFF или 64 тысячи различных символов. Вроде на все существующие на Земле языки хватает.

б) UTF–8. Один из способов представления Unicode. Применяется и в нашем любимом Be. Что за зверь и зачем нужен? Проблема в том, что практически весь существующий хард"н"софт, включая сетевые прилады, рассчитан на 8–битные стандарты передачи данных и представления символов. ( Плюс еще одна накладка — для разных архитектур железа байты внутри 16–битного слова могут располагаться в противоположном порядке, поэтому передача символов в виде 16–битных слов требует указывать в начале передачи этот порядок) Поэтому приходится передавать Unicode–символы не стандартным 16–битным словом, а как последовательность байтов.

При этом число байтов зависит от того, символ какого языка передается. Проще всех англосаксам. Для них достаточно всего одного байта, в котором буквы кодированы в соответствии с ASCII. Для японцев-китайцев–корейцев нужно 4 байта, а нам, славянам, достаточно двух.

5) Unicode–совместимые шрифты. Теперь внутри одного шрифта могут быть глифы (начертания) для большого количества языков. Причем количество глифов не соответствует сумме числа символов для всех поддерживаемых языков.
Потому как в разных языках есть одинковые начертания — зачем же их зря дублировать.
Кроме того, современные шрифты представляют собой по сути программы, в которые засунут способ рисования.
Однако при этом теряется простое числовое соответствие символов и кодов, как и расположение символов в алфавитном порядке.
Для доступа к нужным символам используются специальные таблицы индексов, отдельные для каждого из поддерживаемых языков. Если соответствующего символа нет (или как бы нет) — отображаются так любимые всеми квадратики (в некоторых системах — знаки вопроса).

Теперь подбираемся к нашим баранам, то есть к Be.

BeOS использует повсеместно Unicode/UTF–8, что дает возможность применять одновременно много языков, так, что они друг–другу совершенно не мешают. И все прекрасно до той поры, пока не приходится общаться с внешним миром, который не так прекрасен, и предпочитает всякие кривые и устаревшие подходы :).
Стандартными шрифтами для BeOS являются юникодные TTF–шрифты, хотя в шрифтах, поставляемых по умолчанию, нет никаких других букв, кроме «западных».

Написание или перенос из других ОС «чисто английских» программ не представляет особых проблем. 8–й бит в таком случае всегда остается пустым (Так же как и обмен текстовыми файлами с другими OS).

Для настоящих Unicode–программ этот пустой бит и есть признак кодировки ASCII–7. Если этот бит не пустой — рассматривается следующий байт — и так далее.

6) Теперь о прогах для BeOS. Есть программы «правильные», а есть «неправильные», написанные или лентяями, или программистами, у которых свой глобус, ограниченный понятием Запад.

Те, которые правильные — требуют–позволяют задавать кодировку на входе–выходе. На выходе переводят один байт в нужное количество байт согласно правилам соответствия, например между виндовой кодировкой 1251 ли КОИ8 — и UTF–8. Ну и в другую сторону, соответственно — сколько там было байтов UTF–8 — в один байт соответстующей кодировки.

Для таких программ не нужно иметь отдельного набора шрифтов для каждой из кодировок — они сами находят соответствующие символы в универсальном шрифте, если им указать правильную кодировку. (А новым браузерам и этого не надо — могут сами разобраться, если веб–дизайнер не придурок). Таковы например NetPositive, GimICQ, Be–Mail, Mail–It и многие другие.
Есть и неправильные. Которые воспринимают один байт. И обычно или совсем ни о чем не заботятся, или думают, что это байт в кодировке Western (ISO-8859–1 или Win–1252)/

Глюкавость, например Opera 3.62 for BeOS состоит в том, что ей на эти лишние байты совершенно наплевать. Точнее, при отображении страницы они принимает байты, принадлежащие одному символу за коды нескольких символов.

(Mozilla и все её разновидности для BeOS, справляется с кодировками адекватно, будучи сама внутри основана на 16–битном и UTF–8 юникоде.)

Для таких «неправильных» программ для каждой национальной кодировки нужен специальный шрифт (см. пункт 3 выше), в котором нужные буквы тупо расположены в соответствии с кодами. Но с такими
прогами, несмотря на возможность их использовать в режиме чтения, очень мало шансов для работы на русском языке в Be, в первую очередь из–за проблемм с вводом. (Хотя на случай безвыходных ситуация я создал набор специальных клавиатур, суть которых описана в архивных статьях на www.benews.ru).

Потому как стандартный драйвер клавиатуры ведет себя соответственно Unicode правилам, и никогда не выдаст одиночного байта с включенным восьмым битом и сохранением предыдущих семи битов в соответствии со старыми нац.кодировками, как этого требуют «неправильные» программы, а выдает многобайтные последовательности UTF–8.

7) Чтоб не катить бочку чисто на BeOS, замечу, что те же или почти те же проблемы в мире Windows. Начиная с 95–й поддерживаются многоязычные true type шрифты, но при этом куче приложений, включая Микрософтовский Office 95, на это наплевать. Для такого случая в Виндах предусмотрены костыли — scripts и Font Substitutes. Соответствующий раздел можно найти в файле win.ini.

Кириллические шриты для поддержки старых приложений там прописаны типа так Arial Cyr,0=Arial,204. Старые программы считают, что шрифт Arial Cyr существует в натуре, а на само деле это лишь указание для системы ввода–вывода для перекодировки.
В BeOs я таких костылей на уровне системы не обнаружил.

8) Что делать для русификации, исходя из той занудной премудрости, что мы тут изложили?

a) Стандартный рецепт из FAQ на этом сайте — ставьте свитчер(Switcher) c www.bebits.com и ttf–шрифты из Win95/98.
Не нравится свитчер — ищите на www.bebits.com набор Bilingual Keymaps, где ваш покорный слуга вставил латиницу и кириллицу в один клавиатурный файл, при этом языки переключаются по CapsLock. Существуют аналогичные клавиатурные раскладки для украинского, белорусского и литовского языков.

Достоинства стандартного «правильного» рецепта — доступ к другим языкам кроме английского и русского. Недостатки — проблемы общения с внешним миром и работы с англо–империалистическими программи.

b) Не совсем стандартные, но проверенно–безопасные и BeOS–совместимые, если нужны только английский и русский языки. Берутся шрифты от Win 3.1/3.11 определенных типов. обрабатываются программой ttfconv.exe и инсталлируются. Что при этом происходит? — Сам шрифт остается практически неизменным — старые 8–битные программы видят его так, как и раньше. Но добавляется таблица индексов для Unicode программ, так что и для них шрифт выглядит как (почти) родной.
Главная опасность здесь — самому не перепутать, в какой реально кодировке файл — так как и utf–8 и win1251 будут видны правильно, однако ввод в win1251 текст при помощи utf–8 клавиатуры испортит его, и наоборот.

«Не все шрифты одинаково полезны» — рекомендую для самодеятельности шрифты следующих типов — DL, ER, ET. Например СourDl, ER Bukinist, Times ET. Шрифты серии ER — бесплатные от Gavin Helf, остальные — на вашей совести. Недостатки: Нет других глифов кроме английских и русских. Не всегда показывается буква ё. Не всегда красиво выглядят. Для компенсации можно установить и пару шрифтов от 95/98, но в качестве системных рекомендую все–таки переделанные, потому что куча «неправильных» программ использует их по умолчанию.

Другой вариант того же способа — берутся стандартные многоязычные шрифты из Win95/98 и в них подменяются индексы для символов кодировки WESTERN в диапазоне 128–256 на кириллические. При этом не надо изменять привычке к вашим любимы шрифтам от М$/Monotype. При этом возможно сохранить доступ к символам восточноевропейских и балтийских языков, например.
Такой комплектик мы и прилагаем. Шрифт Таймс переделан с сохранением дополнительных языков, остальные — чисто
англо–русские.

fontpack.zip

Скачали? А теперь скопируйте их в /boot/beos/etc/fonts/ttfonts или /boot/home/config/fonts/ttfonts, удалите аналогичные шрифты от Вин98/95, если вы их ранее поставили (если какой–то из них
был прописан в качестве системного, предварительно системным нужно прописать что–то другое, иначе система после удаления может зависнуть) и сделайте Rescan.

Некоторые особо тупые приложения польуются только «системными» фонтами — из тех что выставляются в Preferences–>Fonts». Ради таких возможно и в качестве системных придется выбрать переделанные шрифты -что, впрочем вполне безопасно:)

Для любителей шрифтов от фирмы BitStream («натуральные» BeOS шрифты) сделан аналогичный пакет с русскими и английскими буквами, который тоже можно найти на www.bebits.com.
---------------------–
Впрочем, в наши дни все больше и больше программ под BeOS поддерживают кодировки правильным образом, поэтому рекомендую, насколько это возможно — пользоваться стандартным методом «русификации».
Для веб–дизайнеров, в частности (это основные страдальцы на тему кодировок), рекомендуемыми программами будут Globe, DarkSite и Mozilla Composer.

Успехов!

P. S. Чтоб совсем не закипятить читателю мозги, лекцию о локалях (locales) мы в этот раз проигнорируем. Коротко говоря, в настоящее время LOCALE под BeOS не используется, в отличие от клонов Unix, где международная жизнь без них невозможно.

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Allowed HTML tags: <a> <em> <i> <img> <strong> <b> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Строки и параграфы переносятся автоматически.

Подробнее о форматировании

CAPTCHA
Введите перечисленные символы, чтобы мы убедились, что вы не робот. Не требуется для зарегистрированных пользователей.
x
M
V
L
3
a
Enter the code without spaces and pay attention to upper/lower case.