Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
51
Добавлен:
02.04.2015
Размер:
8.79 Mб
Скачать
  1. Приложение 3. Поддержка многоязычности Unicode

В этом приложении описывается, как Photon обрабатывает символы различных языков. Это включает:

  • Широкие и многобайтовые символы

  • Unicode

  • UTF-8 кодирование

  • Функции преобразования

  • Другие кодировки

  • Драйверы клавиатуры

  • Формирующие последовательности Photon'а

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

Unicode сконструирован на наборе символов ASCII, но использует 32-битовое кодирование для поддержки полностью многоязычного текста. Он не требует эскейп-последовательностей или управляющих кодов при задании любого символа на любом языке. Заметьте, что кодировка Unicode пригодна для трактовки всех символов – будь то буквы алфавита, иероглифы или символы – совершенно одинаковым образом.

При проектировании драйвера клавиатуры и механизмов обработки символов мы опирались на расширение Х11 клавиатуры и стандарты ISO 9995 и 10646-1.

    1. Широкие и многобайтовые символы

ANSI С включает в себя следующие понятия:

широкий символ

Символ, представленный как значение типа wchar_t, которое обычно больше чем char

многобайтовый символ

Последовательность из одного или более байтов, представляющих символ, хранимый в массиве char. Количество байтов зависит от символа

широкосимвольная строка

Массив типа wchar_t

многобайтовый символ

Последовательность многобайтовых символов, хранящаяся в массиве char

    1. Unicode

Unicode является 32-битовой схемой кодирования:

Он упаковывает большинство международных символов в широкосимвольном представлении (два байта на символ)

Коды меньше 128 определяют те же символы, что и стандарт ANSII.

Коды между 128 и 255 определяют те же символы, что и в наборе символов ISO 8859-1.

Существует область для частного использования в диапазоне от 0хЕ000 до 0хF7FF; Photon отображает её следующим образом:

Глифы

Диапазон

Неотображаемые клавиши

0хF000 – 0xF0FF

Курсорный шрифт

0xE900 – 0xE9FF

Значение символов Unicode см. в файле /usr/include/photon/PkKeyDef.h. Более подробно об Unicode см. на вебсайте консорциума Unicode по адресу www.unicode.org.

    1. UTF-8 кодирование

Известный прежде как UTF-2, формат преобразования UTF-8 (для "8-битовой формы") спроектирован для использования данных в символах Unicode в 8-битовом окружении UNIX. Каждое значение Unicode кодируется как многобайтовая последовательность UTF-8.

Вот некоторые из основных особенностей UTF-8:

  • В UTF-8 представление кодов менее 128 такое же, как в стандарте ASCII, так что любая ASCII строка является также корректной строкой UTF-8 и представлена теми же символами.

  • Значения ASCII, напротив, не участвуют в UTF-8 преобразовании, обеспечивая тем самым полную совместимость с исторически сложившимися файловыми системами, в которых лексический анализ производится на уровне байтов ASCII кодировки.

  • UTF-8 кодирует набор символов стандарта ISO 8859-1 как двухбайтовые последовательности.

  • UTF-8 упрощает преобразование в и из текста в Unicode.

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

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

isInitialByte = ((byte & 0xC0) !=0x80);

  • UTF-8 является довольно компактным в смысле количества байтов, использующихся при кодировке.

В настоящее время кодировка такова:

  • Для многобайтовых кодировок первый байт устанавливает 1 в числе битов высокого порядка, равным числу байтов, использованных в кодировании; бит после них устанавливается в 0. Например, двухбайтовая последовательность начинается с 110 в первом байте.

  • Для всех последующих байтов многобайтной кодировки первые два бита – это 10. Оставшееся значение байта в многобайтовом кодировании всегда больше или равно 0x80.

В следующей таблице показана бинарная форма каждого байта кодирования и минимальное и максимальное значения символов, представленных 1-, 2-, 3-, и 4-байтовым кодированием:

Длина

Первый байт

Следующие байты

Минимальное значение

Максимальное значение

Один байт

0xxxxxxx

нет

0x0000

0x007F

Два байта

110xxxxx

10xxxxxx

0x0080

0x07FF

Три байта

1110xxxx

10xxxxxx

0x0800

0xFFFF

Четыре байта

11110xxx

10xxxxxx

0x10000

0x10FFFF

  • Действительное содержание многобайтового кода (т.е. широкосимвольного кода) является соединением ХХ битов в коде. Двухбайтовый код с кодировкой 11011111 10000000 кодирует широкий символ 11111000000.

  • Там, где возможен более чем один способ кодирования значения (как, например, 0), законным является только наикратчайший. Нулевой символ всегда является одним байтом.

Соседние файлы в папке Литература