Реклама:

У каждого компьютера есть набор символов, который он использует. Как минимум, этот набор включает 26 прописных и 26 строчных букв1, цифры от 0 до 9, а также некоторые специальные символы, в том числе пробел, точку, запятую, минус, символ возврата каретки и т. д.

Для того чтобы передавать эти символы в компьютер, каждому из них приписывается номер, например: а = 1, b = 2, z = 26, + = 27, - = 28. Представление символа в виде целого числа называется кодом символа. Важно отметить, что связанные между собой компьютеры должны поддерживать одни и те же коды символов, иначе они не смогут обмениваться информацией. По этой причине были разработаны стандарты. Здесь мы рассмотрим два самых важных из них.

ASCII

Один из двух широко распространенных кодов называется ASCII (American Standard Code for Information Interchange - американский стандартный код для обмена информацией). Каждый ASCII-символ содержит 7 бит, таким образом всего можно закодировать 128 символов. Коды от 0 до 1F (в шестнадцатеричной системе счисления) соответствуют управляющим символам, которые не печатаются (табл. 2.4).

1 В английском языке. - Примеч. перев.

Таблица 2.4. Таблица кодов для управляющих ASCII-символов

Число

Название

Значение

Число

Название

Значение

NUL

Нуль

DLE

Data Link Escape (Смена канала данных)

SOH

Start of Header (Начало заголовка)

DC1

Device Control 1 (Управление устройством 1)

STX

Start of Text (Начало текста)

DC2

Device Control 2 (Управление устройством 2)

ЕТХ

End of Text (Конец текста)

DC3

Device Control 3 (Управление устройством 3)

EOT

End of Transmission (Конец передачи)

DC4

Device Control 4 (Управление устройством 4)

ENQ

ENQuiry (Запрос)

NAK

Negative AcKnolidgement (Неподтверждение приема)

АСК

ACKnoligement

(Подтверждение приема)

SYN

SYNcronous idle (Пауза)

BEL

Bell (Звуковой сигнал)

ЕТВ

End of Transmission Block (Конец блока передачи)

BS

Backspace (Отступ назад)

CAN

CANcel (Отмена)

НТ

Horizontal Tab

(Горизонтальная табуляция)

ЕМ

End of Medium (Конец носителя)

А

LF

Line Feed (Перевод строки)

SUB

SUBstitute

(Подстрочный индекс)

В

VT

Vertical Tab

(Вертикальная табуляция)

ESC

ESCape (Выход)

С

FF

From Feed (Перевод страницы)

FS

File Separator (Разделитель файлов)

D

CR

Carriage Return (Возврат каретки)

1D

GS

Group Separator (Разделитель группы)

Е

SO

Shift Out

(Переключение на дополнительный регистр)

RS

Record Separator (Разделитель записи)

F

SI

Shift In (Переключение на стандартный регистр)

1F

US

Unit Separator (Разделитель модуля)

Многие управляющие ASCII-символы предназначены для передачи данных. Например, послание может состоять из символа начала заголовка SOH (Start of Header), самого заголовка, символа начала текста STX (Start of Text), самого текста, символа конца текста ЕТХ (End of Text) и, наконец, символа конца передачи EOT (End of Transmission). Однако на практике послания, отправляемые по телефонным линиям и сетям, форматируются по-другому, так что управляющие ASCII-символы для передачи практически не используются.

Печатные ASCII-символы включают буквы верхнего и нижнего регистров, цифры, знаки пунктуации и некоторые математические символы (табл. 2.5).

Таблица 2.5. Таблица кодов для печатных ASCII-символов

Коды символов

UNICODE

Компьютерная промышленность развивалась преимущественно в США, что привело к появлению кода ASCII, более подходящего для английского языка, чем для других языков. Во французском языке есть надстрочные знаки, в немецком - умляуты и т. д. В некоторых европейских языках есть несколько букв, которых нет в наборе ASCII-символов. Некоторые языки имеют совершенно другой алфавит (например, русский или арабский), а у некоторых вообще нет алфавита (например, китайский). Компьютеры распространились по всему свету, и поставщики программного обеспечения хотят реализовывать свою продукцию не только в англоязычных, но и в тех странах, где большинство пользователей не говорят по-английски и нужен другой набор символов.

Первой попыткой расширения кода ASCII стал стандарт IS 646, который добавлял к набору ASCII-символов еще 128 символов, в результате чего получился 8-разрядный набор под названием Latin-i. Добавлены были в основном латинские буквы со штрихами и диакритическими знаками. Следующей попыткой был стандарт 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 ООО символов, кодовые указатели являются очень скудным ресурсом, который нужно распределять с большой осторожностью. Около половины кодов уже распределено, и консорциум, разработавший UNICODE, постоянно рассматривает предложения по распределению оставшейся части. Чтобы ускорить принятие системы UNICODE, консорциум использовал набор Latin-1 для кодов от 0 до 255, обеспечивающий простое преобразование ASCII- в UNICODE-символы. Во избежание излишней растраты кодов каждый диакритический знак имеет собственный код, а объединить диакритический знак с той или иной буквой - задача программного обеспечения.

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

Кроме того, некоторые коды были приписаны диакритическим знакам (112), знакам пунктуации (112), подстрочным и надстрочным знакам (48), знакам валют (48), математическим символам (256), геометрическим фигурам (96), рисункам (192).

Нужны также символы для китайского, японского и корейского языков. Сначала идут 1024 фонетических символа (например, катакана и бопомофо), затем иероглифы, используемые в китайском и японском языках (20 992), потом слоги корейского языка (11 156).

Чтобы пользователи могли создавать новые символы для особых целей, существуют еще 6400 кодов.

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

Еще одна проблема состоит в том, что постоянно появляются новые слова. 50 лет назад никто не говорил об апплетах, киберпространстве, гигабайтах, лазерах, модемах, смайликах или видеопленках. Появление новых слов в английском языке новых кодов не требует, а вот в японском они нужны. Помимо новых терминов, необходимо также добавить по крайней мере 20 000 новых имен собственных и географических названий (в основном китайских). Шрифт Брайля, которым пользуются слепые, вероятно, тоже должен быть задействован. В наличии тех или иных особых символов заинтересованы и представители различных профессиональных сообществ. Консорциум UNICODE рассматривает все новые предложения и выносит по ним решения.

В системе UNICODE используется один и тот же код для символов, которые выглядят почти одинаково, но имеют несколько значений или пишутся немного по-разному в китайском и японском языках (как если бы английские текстовые процессоры всегда писали слово "Ыие" как "blew", потому что они произносятся одинаково). Одни считают такой подход оптимальным для экономии скудного запаса кодов, другие рассматривают его как англосаксонский культурный империализм (а вы думали, что приписывание символам 16-разрядных значений не носит политического характера?). Дело осложняется тем, что полный японский словарь содержит 50 000 иероглифических знаков (не считая имен собственных), поэтому при наличии 20 992 кодов приходится делать выбор и чем-то жертвовать. Далеко не все японцы считают, что консорциум компьютерных компаний, даже если некоторые из них японские, является идеальным местом для принятия решений о том, чем именно нужно жертвовать.

Цифровые фотокамеры || Оглавление || Краткое содержание главы