Читать «Архитектура компьютера» онлайн - страница 135

Эндрю Таненбаум

Первой попыткой расширения кода ASCII стал стандарт IS 646, который добавлял к набору ASCII-символов еще 128 символов, в результате чего получился 8-разрядный набор под названием Latin-1. Добавлены были в основном латинские буквы со штрихами и диакритическими знаками. Следующей попыткой был стандарт IS 8859, который ввел понятие кодовой страницы. Кодовая страница — набор из 256 символов для определенного языка или группы языков, в IS 8859-1 это набор Latin-1. Стандарт IS 8859-2 включает славянские языки с латинским алфавитом (например, чешский, польский и венгерский), стандарт IS 8859-3 описывает символы турецкого, мальтийского и галисийского языков, эсперанто и т. д. Главным недостатком такого подхода является то, что программное обеспечение должно контролировать, с какой именно кодовой страницей оно имеет дело, при этом смешивать языки недопустимо. К тому же эта система не охватывает японский и китайский языки.

Группа компьютерных компаний разрешила эту проблему, создав новую систему кодирования под названием Unicode, и объявила эту систему международным стандартом (IS 10646). Unicode поддерживается некоторыми языками программирования (например, Java), некоторыми операционными системами (например, Windows NT) и многими приложениями. Вероятно, эта система будет распространяться по всему миру.

Основная идея Unicode — приписать каждому символу единственное постоянное 16-разрядное значение, которое называется кодовым пунктом. Многобайтные символы и символы-заменители не используются. Поскольку каждый символ состоит из 16 бит, писать программное обеспечение гораздо проще.

Так как Unicode-символы состоят из 16 бит, всего получается 65 536 кодовых пунктов. Поскольку во всех языках мира в общей сложности около 200 000 символов, кодовые указатели являются очень дефицитным ресурсом, который нужно распределять с большой осторожностью. Около половины кодов уже распределено, и консорциум, разработавший Unicode, постоянно рассматривает предложения по распределению оставшейся части. Чтобы ускорить принятие системы Unicode, консорциум использовал набор Latin-1 для кодов от 0 до 255, обеспечивающий простое преобразование ASCII- в Unicode-символы. Во избежание излишней растраты кодов каждый диакритический знак имеет собственный код, а объединение диакритического знака с той или иной буквой должно осуществляться программным обеспечением.

Вся совокупность кодов разделена на блоки, каждый блок содержит 16 кодов. Каждый алфавит в Unicode имеет ряд последовательных зон. Приведем некоторые примеры (в скобках указано число задействованных кодов): латынь (336), греческий (144), русский (256), армянский (96), иврит (112), деванагари (128), гурмукхи (128), ория (128), телугу (128) и каннада (128). Отметим, что каждому из этих языков приписано больше кодов, чем в нем есть букв. Это сделано отчасти потому, что во многих языках у каждой буквы есть несколько вариантов написания. Например, каждая буква в английском языке представлена в двух вариантах: там есть строчные и ПРОПИСНЫЕ буквы. В некоторых языках буквы имеют три или более формы написания, выбор конкретного варианта зависит от того, где находится буква: в начале, конце или середине слова.