КАК КОМПЬЮТЕР ГРАМОТЕ УЧИЛИ

17-01-2004

Здесь ещё раз следует подчеркнуть, что предлагаемая система
транслитерации позволяет полностью избежать использования
диакритических знаков, кодирование которых представляет в
компьютерном деле особую трудность;

Дмитрий Горбатов
К ПРОБЛЕМЕ ЛАТИНСКОЙ ТРАНСЛИТЕРАЦИИ КИРИЛЛИЦЫ
(попытка универсального проекта)
http://www.lebed.com/2002/art2912.htm

Как видно из эпиграфа, кодирование компьютерных символов до сих представляется рядовому пользователю «в форме змеи». Разъяснению базовых понятий применительно к кодированию кириллицы и посвящен текст ниже. Это – популярный очерк «для интересующихся», не претендующий на полноту; дополнительные подробности и практические вопросы  сведены в обозначенные римскими цифрами примечания в конце статьи. Все ссылки на конкретные меню или опции относятся к операционной системе Windows, браузеру InternetExplorer и почтовой программе Outlook Express.

Прежде чем дать компьютеру информацию ее нужно представить в понятном для компьютера виде - закодировать. Компьютерный код состоит из комбинаций двух элементарных команд - импульса (единицы) и отсутствия импульса (нуля). Любое сочетание нулей и единиц представляет собой определенное число, записанное в двоичной системе счисления. Мы привыкли к десятеричной системе (недаром у нас на руках десять пальцев, используемых нами для счета), в которой каждое число записывается как сумма степеней 10. Например, число 256 = 2 * 102 + 5 * 101 + 6 * 100  (см. примечаниеi). Одно и то же число можно записать в разных системах. Числу 256 десятеричной системы соответствует число 400 в восьмеричнойii, 100 в шестнадцатеричнойiii и 100000000 в двоичнойiv. Соответственно десятеричное число 15преобразуется в F в шестнадцатеричной и 1111 в двоичной системах, а 255 даст FF и 11111111v.

Компьютер не разбирается в символах, из которых составляется текст, он оперирует численными кодами этих символов. Код символа – это не что иное, как его номер. На заре компьютерной эры ресурсы памяти были ограниченными, поэтому для первых компьютеров взяли систему с как можно малыми номерами-кодами символов. Это была система знаков ASCII (American Standard Code for Information Interchange), применявшаяся в телеграфииvi. Ниже дана таблицаvii этих знаков. Номера-коды знаков проставлены от 0 до 127 в десятеричной системе, от 0 до 7F в шестнадцатеричной системе и от 0 до 177 в восьмеричной системе, что соответствует интервалу от 0000000 до 1111111 в двоичной системе, т.е. по 7 битов для запоминания каждого символа было необходимо 7 ячеек памяти, в которых хранились нули и единицыviii, а всего символов было 27 = 128. Также даны коды HTML символов; как видно из таблицы, они представляют собой номер-код в десятеричной системе с добавлением служебных знаков &# – слева и ; – справа.

 

Первые 32 знака были служебными кодами телеграфии, которые почти не нашли применения для компьютеровix; поэтому, когда появилась первая операционная система персональных компьютеров DOS, большая часть этих знаков подверглась переосмыслению, и, кроме того, 128 знаков оказалось недостаточно на все случаи жизни. Число знаков удвоили, для чего понадобилось добавить к коду еще один бит, код стал восьмизначнымx, а число кодов стало равным 28 = 256. Ниже слева дана таблицаxi символов DOS с добавками – латинскими буквами с диакритическими знаками и графическими символами. Так, персональный компьютер интернационализировался и научился показывать на экране таблицы и прямоугольники. С появлением операционной системы Microsoft Windows символы со 128 по 256 были переиначены. Ниже справа дана таблица символов Windowsxii.

Этот код стал называться расширенным ASCII или ANSI (American National Standards Institute). Исчезли примитивные графические символы DOS, в которых отпала необходимость,  а латинские буквы с диакритическими знаками перешли на самые последние позиции.

 

Первые попытки русифицировать компьютеры начались еще до появления DOS. Семибитным кодам присвоили кириллические символы вместо латинских по примерному фонетическому соответствию. Система получила название KOI-7 (сокращение от Код Обработки Информации). С появлением полнобайтного кода кириллицей заменили альтернативные латинские символы с кодами-номерами от 192 до 256xiii. Так родилась кодировка KOI-8, объединяющая в одном коде латиницу с кириллицей. Ниже дана таблица кодов кириллицы в кодировке KOI-8xiv.

KOI-8 стала стандартом операционной системы Unix, а с ней и стандартом интернета.

В DOS существовали две системы кириллического кодирования: болгарская и русская. Windows дала стандартную кириллическую кодировкуxv, но ситуация оставалась запутанной. Ниже дана кириллическая кодировка – Windows Cyrillic Codepage 1251, где кириллица занимает те же самые последние позицииxvixvii, хотя в отличие от KOI– 8 сначала идут заглавные буквы, а потом строчныеxviii.

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

Character Set / Codepage Languages for which codepage is used Computer system where codepage is used Fonts to download
Windows Cyrillic (1251) Russian, Byelorussian, Serbian, Bulgarian, Ukrainian, Macedonian Windows  XSerif Cyr (Info on XSerif fonts - normal typeface only)  ER Bukinist 1251 (serifs) ER Kurier 1251 (fixed font) ER Univers 1251(sans serif) ER-fonts are freeware (c) by Gavin Helf. They include normal, bold, italic and bold italic typefaces.
KOI8-R Russian Internet, WWW, E-Mail, Newsgroups, UNIX systems ER Bukinist KOI8 (serifs) ER Kurier KOI8 (fixed font) ER Univers KOI8 (sans serif) ER-fonts are freeware (c) by Gavin Helf. They include normal, bold, italic and bold italic typefaces.
Apple Standard Cyrillic Russian, Byelorussian, Serbian, Bulgarian, Ukrainian, Macedonian Apple Macintosh  ER Bukinist Mac (serifs) ER Kurier Mac (fixed font) ER Univers Mac (sans serif) ER-fonts are freeware (c) by Gavin Helf. They include normal, bold, italic and bold italic typefaces.
ISO Cyrillic (8859-5) Russian ?
DOS Cyrillic (IBM 866) Russian DOS  ER Bukinist 866 (serifs) ER Kurier 866 (fixed font) ER Univers 866 (sans serif) ER-fonts are freeware (c) by Gavin Helf. They include normal, bold, italic and bold italic typefaces.

Кириллица не единственный не латинский шрифт; достаточно вспомнить, что в бывшем СССР существовали такие алфавиты, как армянский, грузинский, еврейский; однако, и кириллица, и латиница имеют разновидности – в нашей бывшей стране кириллицу приспосабливали широком диапазоне – от молдавского до таджикского языков, да и балтийские языки имели каждый по своему алфавиту. Ни для латинского алфавита, ни для кириллицы обычно не придумывали новые буквы, чтобы приспособиться к конкретным языковым нуждам, а приделывали к уже существующим особые значки – диакритические знаки. Однако, буквы с диакритическими знаками были разновидностями одной буквы только для человека. Для компьютера все они были новыми символами, каждый из которых должен был иметь свой номер-код. Появлялись все новые кодовые страницы, в мире имели хождение сотни различных схем подобного кодирования символов. Но ни одна из этих схем не была столь универсальной, чтобы описать все необходимые символы: например, только для кодирования букв, входящих в алфавиты языков Европейского Сообщества, необходимо было использовать несколько различных кодировок. По большому счёту даже и для отдельного языка, скажем, английского, не существовало единой системы кодирования, включавшей в себя все обычно используемые буквы, знаки пунктуации и технические символы.

Более того, все эти схемы кодирования часто даже не были совместимы друг с другом. К примеру, разные кодировки могли использовать один и тот же код для представления разных символов или присваивать разные коды одной и той же буквеxx. В этой ситуации для любого компьютера, а особенно сервера, приходилось поддерживать несколько разных кодировок, которые могли понадобиться, но даже и тогда при передаче данных на другую платформу или при их преобразовании в другую кодировку всегда оставался риск, что эти данные окажутся повреждёнными.

Радикальное решение потребовало удвоения объема информации для передачи символов. Была разработана система Unicode, в которой каждый символ передается двумя байтами информации, т.е. шестнадцатью битами. Число возможных символов в системе Unicode 216 т.е. 65536. Система Unicode присваивает уникальный код любому символу, независимо от платформы, независимо от программы, независимо от языка включая иероглифическое письмо Дальнего Востока, которое было унифицировано, благодаря чему китайские, японские и корейские иероглифы одного происхождения изображаются одними и теми же символами. Чтобы в дальнейшем не возникло каких-то проблем даже при таком большом количестве символов в системе Unicode предусмотрена возможность включения в него символов, кодируемых четырьмя байтами, таких символов может быть 232 = 4294967296 – более четырех миллиардов! Эта кодировка поддерживается во множестве операционных систем, во всех современных браузерах интернета и в большом количестве других программ. Система постоянно корректируется. Ниже дана таблица кириллических символовUnicodexxi, но к ней уже есть дополнение. Нетрудно заметить, что учтены символы языков народов бывшего СССР, а также Болгарии, Сербии, Македонии плюс исторические ныне не употребляемые символы. Как видно из таблицы, диапазон основных символов кириллицы простирается от 0410 до 044F шестнадцатеричной системы, т.е. от 1040 до 1103 десятеричной, что гораздо выше, чем KOI-8 и Windows Cyrillic Codepage 1251. Зато в Unicode первые 127 символов все те же, что и в любой кодовой странице Windows. На практике это означает, что если открыть текст в кодировке Unicode с латинскими и кириллическими символами в среде любой другой кодировки, то текст, набранный латинскими символами не изменится, а вместо кириллицы получится какое-то непредсказуемое сочетание символов (которых, кстати, будет в два раза больше, чем, в исходном кириллическом тексте).

Unicode дал возможность решения проблем кодировок, но они ещё остаются, т.к. необходимо время для перехода на эту новую системуxxii. А пока выполняется принцип обратной совместимости, чтобы пользователи программам, не поддерживающими Unicode, могли беспрепятственно пользоваться компьютерами.

Пока компьютер используется как изолированная пишущая машинка, трудности возникают не очень серьезные, но при подключении к интернету и особенно при обмене электронными письмами пользователей проблемы обостряются. В интернете кириллические тексты путешествуют в кодировке КОI-8, а на персональных компьютерах их чаще всего открывают в кодировке Windows. При этом Outlook Express сам «за кулисами» переводит кириллический текст в нужную кодировку, но возможны осложненияxxiiixxiv.

Здесь следует наконец-то поставить точку, хотя проблемы остаются. Универсальный Unicode не отменил старые кодировки, и, пока ими продолжают пользоваться, остаётся необходимость в перекодировании со всеми своими трудностями.


i. Если взять любое число в какой-то степени и разделить на то же число в другой степени, то частное будет тем же числом в степени, представляющей разность степени делимого и степени делителя. Например, 243 / 9 = 27, т.е. 35 / 32 = 33 или 35 – 2 = 33. Если степени делимого и делителя равны, то в частном получаем 1, например, 100 / 100 = 1, т.е. 102 / 102 = 100 = 1, или 102 – 2 = 100 = 1.

ii. В восьмеричной системе не 10 цифр, а только 8, т.е. 0, 1, 2, 3, 4, 5, 6, 7, а далее уже 10 – основание системы. Таким образом, 4 * 82 = 256 в десятичной системе будет выглядеть как 4 * 102 = 400.

iii. В шестнадцатеричной системе 16 цифр: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F где буквы A, B, C, D, E, F являются однозначными эквивалентами двузначных чисел десятеричной системы 11, 12, 13, 14, 15, а вот десятеричная 16 будет в шестнадцатеричной системе – 10 – основанием системы.

iv. В двоичной системе только две цифры – 0 и 1. Десятеричное 2 в двоичной системе уже будет 10 (основанием степени). Десятеричное число 256 (представляющее собой 28)  в двоичной системе выражается единицей с восемью нулями.

v. Можно заметить, что двоичные числа легко переводить в шестнадцатеричные. Для этого любое двоичное число нужно дополнить слева нулями, чтобы получилось число цифр кратное восьми, далее разбить это двоичное число на блоки по восемь цифр – октеты, каждый октет (двузначное число в шестнадцатеричной системе) перевести в шестнадцатеричную систему, а далее полученные числа приписать одно к другому в порядке следования. Например, 111011011101 дополним четырьмя нулями до 0000111011011101 до двух октетов и разобьем пополам 00001110.11011101. Первый октет равен числу E, второй равен числу DD, а все число будет EDD или 3805 в десятичной системе. Всем известные IP адреса представляют собой разделенные точками четыре октета большого двоичного числа – номера-адреса абонента, записанные в виде десятеричных чисел (от 0 до 255). Существуют практические приемы перевода чисел из одной системы в другую и таблицы перевода, но, пользуясь операционной системой Windows, можно переводить числа из одной важной для компьютера системы в другую с помощью калькулятора. Для этого нужно нажать клавишу «Windows» (вторая справа внизу клавиатуры) и далее по меню Programs => Accessories => Calculator. Получив калькулятор на экране, нужно войти в его меню View => Scientific. В «научной» форме калькулятор имеет четыре кнопки переключения под окном ввода числа: Hex (шестнадцатеричная система), Dec (десятеричная система), Oct (восьмеричная система), Bin (двоичная система). Введя целое число в режиме любой из этих систем, можно переключением кнопки перевести его в любую другую из систем поддерживаемых калькулятором.

vi. Есть еще стандарт фирмы IBM для компьютеров класса mainframe – EBCDIC, получивший какое-то распространение.

vii. Таблица взята с интернет-страницы http://www.asciitable.com/.

viii. Единица (соответствует наличию единичного сигнала) и нуль (соответствует его отсутствию) представляют единицу информации – бит.

ix. Некоторые все же нашли применение в программном коде: например, BEL (звонок) и сейчас выдает предупреждающий звуковой сигнал, LF (переход на новую строку) используется по прямому назначению, CR (возврат каретки) означает жесткий перенос в текстовых редакторах.

x. Эти восемь битов информации, потребные для изображения одного символа, стали новой единицей - байтом.

xi. Таблица взята с интернет -страницы http://www.jimprice.com/jim-asc.htm

xii. Таблица взята с интернет-страницы http://www.jimprice.com/jim-asc.htm

xiii. В двоичной системе это были номера, начинающиеся не с нуля, а с единицы, т.е. на разряд выше (например, десятеричные числа 126, 127, 128, 129 заполняют восемь ячеек памяти по двоичной системе как 01111110, 01111111, 10000000, 10000001).

xiv. Таблица взята с интернет-страницы http://www.volgawriter.com/VW%20fonts.htm

xv. Различным кодировкам были присвоены номера, и они стали называться «кодовыми страницами», например, DOS Codepage 866, Windows Codepage 1251 для кириллицы.

xvi. Таблица взята с интернет-страницы http://www.volgawriter.com/VW%20fonts.htm

xvii. Читатель может проделать эксперимент, чтобы убедиться в том, что кириллическим символам присвоены именно указанные в таблице номера. Для этого нужно в любом текстовом редакторе одним пальцем нажать на клавишу alt, а другим пальцем набрать 0 и далее любой номер из этой таблицы цифровыми клавишами справа от буквенной клавиатуры (не теми, что сверху!).

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

xix. Таблица взята с интернет-страницы http://www.slovo.info/eurocp.htm, а кодировка ISO-8859-5 используется для русского на некоторых UNIX-машинах, а также в странах бывшей Югославии.

xx. Например, букве"л" присвоены следующие коды в различных кодировках кириллицы:
219 в кодировке ISO-8859-5
235 в кодировке Windows-1251
204 в кодировке KOI8-R
171 в кодировке DOS-866
До того, как появились кодовые страницы, во времена DOS и разных версий Windows 3, в компьютере была "зашита" одна кодировка, а переход к другим кодировкам был сопряжен с инсталлированием специальных драйверов и наборов шрифтов для получения знаков отличных от стандартной кодировки DOS или Windows. Программы писали все желающие. В каждой союзной республике была потребность в своих программах, чтобы компьютер писал как минимум по-английски, по-русски и еще на языке союзной республики. Никакой стандартизации, конечно, не было и одна и та же буква алфавита союзной республики могла кодироваться как угодно (в Латвии, например, насчитывалось до шести кодировок латышского алфавита).

xxi. Часть данных по системе Unicode и таблица взяты с официального сайта http://www.unicode.org/

xxii. Большинство текстовых редакторов уже перешло почти незаметно для пользователей на систему Unicode, например, Microsoft Office, начиная с версии 97 (поэтому в них не читаются кириллическая часть шрифтов для более старых версий программы). Теперь число различных символов в тексте в несколько раз превышает возможности ANSI. Эти символы можно увидеть и вставить в текст, например, при работе с популярным шрифтом Times New Roman: нужно пойти в меню Insert => Symbol => (normal text). При прокрутке таблицы символов можно найти дополнительные символы кириллицы, символы арабского и еврейского алфавитов и многое другое. Если в компьютере установлен шрифт Arial Unicode MS (в последних версиях Windows), то можно вставить дальневосточные иероглифы и многое другое – всего около сорока тысяч символов стандарта Unicode 2.1, для этого вместо (normal text) нужно выбрать Arial Unicode MS. Кстати, если выбрать какой-то символ и затем «кликнуть» на кнопку Shortcut Key, то в открывшемся окне в контейнере Description можно увидеть число – это и есть код выбранного символа в десятеричной системе. Приписав к нему служебных знаки &# - слева и ; - справа, получаемHTML код этого символа, который можно далее вставить в любой HTML текст для получения этого символа.

xxiii. Подробнее об этом можно узнать в детально проработанном труде Павла Городянского на сайте http://ourworld.compuserve.com/homepages/PaulGor/index_ru.htmтам же (а также на ссылках оттуда) можно найти  решения русификации многочисленных сочетаний разных операционных систем, программ, шрифтов.

xxiv. Однако и Outlook Express можно загнать в тупик. Если приходит письмо из латинских символах не в кириллической кодировке, а адресат хочет ответить по-русски, то при попытке отправить текстOutlook Express честно выдает сообщение Message Character Set Conflict и предлагает либо перевести письмо в кодировку Unicode, либо послать его таким, как оно есть. Оба предложения, к сожалению, неудачные. Если послать письмо таким, как оно есть, то вместо кириллицы придут одни вопросительные знаки (Outlook Express не найдет в латинской кодировке нужные символы и поставит вместо них вопросы). Если же послать в кодировке Unicode, то такой ответ (в котором, без перекодировки в Unicode, кириллица выглядит как бессмысленное сочетание латинских и специальных символов) сможет прочитать только искушенный получатель, переключив кодировку прибывшего письма в меню View => Encoding => Unicode (UTF-8). Лучшее решение: получив такое предупреждение от Outlook Express, отменить предупреждение (выбрать опцию Cancel), а далее установить в меню Format => Encoding => Cyrillic (KOI8–R); тогда ответ уйдет в том виде, в котором его видит отправитель.

Комментарии

Добавить изображение