Rambler's Top100
 
 
  04 декабря 2008 года Компьюлента
CIO
Терралаб
Бизнес-журнал
в поле зрения | обзоры и тесты | своя игра | интерактив
Загадочное семейство
Автор: Владимир Лидовский
Опубликовано в журнале "Компьютерра" №42 от 20 ноября 2003 года

 Работая с Интернетом и электронной почтой, многие из вас наверняка не раз сталкивались с проблемой выбора кодировки для букв русского алфавита. Но что стоит за всеми этими малопонятными названиями типа cp866, koi-8r, UTF-8 или ISO 8859-5? И как вообще представляются символы в компьютере?

Прародитель

Для компьютерного представления текста необходимо каждому знаку присвоить некоторое число – его код. Все современные таблицы кодировок происходят от возникшей еще в 60-е годы 7-разрядной таблицы ASCII (American Standard Code for Information Interchange), которая содержит 33 кода команд или управляющих символов, большая часть которых сегодня не используется, и 95 кодов для различных знаков, достаточных для работы с английскими текстами. При 7-разрядном кодировании каждому символу сопоставляется 7 бит кода, т. е. число в диапазоне от 0 до 127. В простых текстовых (plain text) файлах допустимы только управляющие символы, отмечающие концы строк и переходы на позиции табуляции. Скажем, маркер конца строки в Linux — это код 10, в Macintosh OS — 13, в CP/M, DOS и Microsoft Windows — последовательность кодов 13, 10.

Для аналогичного представления знаков русского алфавита ныне применяется таблица КОИ-7 (Код для обмена информацией 7-битный): это та же ASCII, но в которой вместо строчных латинских букв и шести других символов размещены заглавные буквы кириллицы, а вместо заглавных — строчные. У такого кодирования есть два важных преимущества: оно компактно (для доступа к латинским и другим буквам и возврата обратно к кириллице используются специальные управляющие коды), и оно вводит естественную транслитерацию, что позволяет работать с текстами на русском единообразно на разных компьютерных системах.

ASCII-коды все еще достаточно широко используются для текстов на английском, особенно в США, а также в системах e-mail. Стандартные текстовые утилиты UNIX (grep, sed, awk) вплоть до середины 90-х по умолчанию могли работать только с ASCII — подключение 8-го бита требовало их перекомпиляции. Сегодня 7-битная кириллица встречается, пожалуй, только в системе для подготовки научных публикаций TEX, да и то неявно, а для кодирования символов алфавитов большинства языков используется 8-разрядное кодирование, т. е. кодирование, при котором каждому символу сопоставляется 8 бит или 1 байт кода. Код представляет собой число в диапазоне от 0 до 255, а первые 128 символов при таком кодировании аналогичны ASCII.

Потомок

Международный стандарт ISO/IEC 8859-1 стал в наши дни де-факто заменой для ASCII. В нем первые 32 кода, числа 128–159, соответствуют практически неиспользуемым управляющим символам, общим для всех таблиц кодировки ISO. Хотя 8859-1 может использоваться для текстов почти на всех западноевропейских языках, он не полностью покрывает нужды французского и финского. Этот недостаток, а также отсутствие знака для новой общеевропейской валюты привели в 1999 г. к возникновению кодировки 8859-15, в которой изменены значения восьми кодов 8859-1, в частности, установлено 164 (A4) — ? (20ac в UCS).

Всего в ISO 8859 определяются четырнадцать 8-битовых таблиц кодировки, например, 8859-6 содержит набор арабских букв, 8859-7 — греческих, а 8859-8 — иврита.

Сводный брат

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

Кодировка Unicode опирается на каталог символов UCS (Universal Character Set) стандарта ISO 10646. UCS может содержать до 231=2147483648 различных знаков и постоянно пополняется. Коды UCS-2 — 2-байтные, т. е. числа от 0 до 65535, а UCS-4 — 4-байтные, т. е. числа от 0 до 2147483647. ASCII — это первые коды UCS-2, а UCS-2 — это начало UCS-4. Двух и четырехбайтные коды Unicode могут представляться двумя способами: байты располагаются слева направо от старшего к младшему (Big Endian, BE) или от младшего к старшему (Little Endian, LE). Второй способ встречается в подавляющем большинстве случаев. Кроме того, для более компактного кодирования используются коды переменной длины UTF-8 (Unicode Transfer Format) — 1–6-байтные и UTF-16 — 2- или 4-байтные. Последние также существуют в двух видах (Little и Big Endian) и позволяют кодировать не более 220+216=1114112 знаков. Все коды UCS-2 являются также и кодами UTF-16. Есть еще формат UTF-7, который позволяет для большинства символов ASCII использовать 7-битные числа, — он обеспечивает доступ только к UCS-2. Коды Unicode 20 (пробел), A0 (неразрывный пробел) и AD (перенос), присутствующие во многих 8-разрядных таблицах, можно рассматривать как управляющие.

Часть кодов в UCS зарезервированы для личного или ограниченного локальными рамками использования. Остальные коды также сгруппированы по назначению, например, кириллице выделен диапазон 400–4FF16.

Все большее распространение в Интернете получает кодировка UTF-8, которая позволяет обходиться 8 битами для кодирования символов ASCII и 16 битами для кодирования символов большинства алфавитных письменностей, в т.ч. русской. Тексты в ASCII, в частности, на английском языке являются одновременно и текстами в UTF-8. Код UTF-8, последовательность байт, получается из кода каталога UCS по следующей однозначной схеме:

 

 

00000000–0000007F16 (0–127):

                     0xxxxxxx

 

 

 

00000080–000007FF16 (128–2047):

 

110xxxxx 10xxxxxx

 

 

 

00000800–0000FFFF16 (2048–65535):

 

1110xxxx 10xxxxxx 10xxxxxx

 

 

 

00010000–001FFFFF16 (65536–2097151):

 

11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

 

 

 

00200000–03FFFFFF16 (2097152–67108863):

 

111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

 

 

 

04000000–7FFFFFFF16 (67108864–2147483647):

 

1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx.

 

 

 

Позиции битов, обозначенные как буква x, заполняются соответствующими битами из кода символа в бинарном представлении. Используется кратчайшая из возможных многобайтовых последовательностей, которые могут представить код символа. Например, символ Unicode с кодом 169 = a916 = 1010 1001 (знак ©) кодируется в UTF-8 как 11000010 10101001 = c216 a916, а символ с кодом 8800 = 226016 = 0010 0010 0110 0000 (знак ) кодируется так: 11100010 10001001 10100000 = e216 8916 a016.

Unicode достаточно полно поддерживается современными программами – браузерами, офисными пакетами и т. п. В Linux используется UTF-8, а в Microsoft Windows еще и UCS-2. Пока поддержка UCS в Linux несколько слабее, чем в Microsoft Windows 2000/Me/XP. Главные проблемы при использовании Unicode — отсутствие соответствующего полного набора шрифтов и сложность ввода. Как, скажем, российскому пользователю вводить специфические испанские буквы, математические знаки, китайские иероглифы? Для этого приходится использовать те или иные программы – к примеру, может помочь текстовый редактор Yudit (www.yudit.org).

стр. 2>>

ТАКЖЕ В РАЗДЕЛЕ
24 февраля 2005 года
Cобытия 
24 февраля 2005 года
Одежки с застежками 
15 февраля 2005 года
События 
08 февраля 2005 года
События 
 
САМОЕ ПОПУЛЯРНОЕ
Такие разные спутники
Александр Трухачев, директор российского представительства MIO Technology, завел свой блог на "КТ-Онлайн", чтобы рассказать об особенностях рынка потребительской электроники в России. Но для начала - о GPS и ГЛОНАСС.
Текстовые развлечения
Поработаем в жанре ASCII Art и расскажем, как научиться рисовать при помощи символов, как переводить изображение любого формата в текстовый файл и как взглянуть на интерфейс Windows сквозь призму псевдографики.
Топ 5: Самые жестокие компьютерные игры
Хотите кровушки? Получайте... World of Warcraft: Lich King (правда-правда), - Mortal Kombat (здравствуй детство), - Postal (куда ж мы без Чувака), - Manhunt (режь-убивай), - Thrill Kill (адское месиво).
Диалоги с программистами. Часть 3: iPhone и бар на пляже
Сегодня в нашем распоряжении программист, который создает код для совершенно непрограммистского устройства - iPhone. Да, здесь есть свои особенности...
/  бумажный номер

Тема номера: Кризис в ИТ Читайте на сайте тему номера "Кризис в ИТ" и другие статьи из журнала "Компьютерра" от 04 ноября 2008 года
  Архив номеров журнала

О проекте | Реклама на сайте | Рассылки сайта | КПК–версия | RSS-трансляция

© ООО «Компьютерра–Онлайн», 1997 — 2008.
При цитировании и использовании любых материалов ссылка на портал «Компьютерра–Онлайн» обязательна (для Интернет–изданий — www.computerra.ru)
Редакция сайта: site@computerra.ru
Техподдержка сайта: websupport@computerra.ru
Редакция журнала: inform@computerra.ru
Отдел рекламы: reklama@computerra.ru
Телефон: (495) 232–22–61, (495) 232–22–63
Работает на «Битрикс: Управление сайтом»
Почта защищена сервером «СПАМОРЕЗ»
Трилан — продвижение сайта,
поисковая оптимизация сайта

Сайт работает на сервере DEPO Computers
Rambler's Top100