Добавление замещающей поддержки в библиотеку Юникод

Автор: Сан Хосе

Перевод: Жога А.В.


Источник: http://unicode.org/iuc/iuc17/b2/slides.ppt


17 Международная Юникод Конференция
Сан Хосе, Калифорния, сентябрь, 2000 г.
Из кода UCS-2 в код UTF-16


Обсуждение и типичные примеры по переводу библиотеки Юникода из кода UCS-2  в код UTF-16
В данном докладе рассматривается необходимость поддержки замещающих символов, исследуется множество вариантов их осуществления со всеми «за» и «против», а также предоставляются примеры на практике.
Так как подготовка второй части ISO 10646 и следующей версии Юникода подходит к концу, также необходимы приложения по Юникоду относительно поддержки заданных символов, существующих вне формата BMP. Хотя шифрование диапазона Юникод  было официально расширено по «замещающему»  принципу действия с помощью Юникода 2.0 в 1996, большое число внедрений все еще допускают, что шифр точки вписывается в 16 бит. В конце этого года, проекты для новых стандартных версий ожидаются неизменными, а предоставление замещающих символов для применения на рынках Восточной Азии вскоре потребует внедрений, поддерживающих полный диапазон Юникода.
К примеру, Международные составляющие для Юникода (ICU), проект открытого доступа, обеспечивает низкую степень поддержки в программе С и С++, подобно пакету Java JDK 1.1. Для поддержки полного диапазона шифрования некоторые интерфейсы прикладных программ и другие конечные программы разработки пришлось изменить. В данном докладе рассмотрены несколько вариантов по данной теме.
Интерфейсные блоки ввода данных и программные интерфейсы приложений напряду с готовыми разработанными программами были адаптированы для кода UTF-16 с 32-битным кодовым обозначением для единичных символов, а обзор их характерных особенностей привел к возможности работы с замещающими символами. Данный подход сравним с действиями других компаний и организаций, в особенности для Java, Linux и других программных средств, а также для Windows.
Почему это является проблемой?

Стандартный Юникод был разработан для шифрования свыше 65 000 символов; в программе «Стандартный Юникод, Версия 1.0» на второй странице сказано:
«Завершенность. Набор кодируемых символов достаточен для охвата всех символов, входящих в число наиболее используемых во всех текстовых обменах».
Считалось возможным наличие более 65 000 символов, так как редко применявшиеся, устаревшие, составные символы не шифровались – они не входили в число «наиболее используемых в текстовом обмене». Юникод включил область личного пользования нескольких тысяч кодируемых знаков для обеспечения подобных требований.
Единственная форма шифрования представляла собой постоянное 16-битное шифрование. С расширением кодового пространства, что стало необходимым позже, 16-битное шифрование стало меняющимся. Шифрование, базирующееся на байтах и 32-ьитном постоянном шифровании было добавлено позже. Данные изменения шли рука в руку с формированием и растущим признанием и применением Юникода.
16-битные  программные интерфейсы приложений

Программные библиотеки, разработанные несколько лет назад для Программных интерфейсов приложений и конечных программ, были рассчитаны на то, что текст Юникода будет сохранен в первоначальном 16-битной постоянной форме. Один 16-битный кодирующий блок в системе, которую стандарт ISO 10646 называет UCS-2,   всегда зашифровывал один символ Юникода. Это соответствует действительности в случае с версией Юникод 1.0 и 1.1.
В модели для библиотек, функционирующих с таким допущением, входят набор Microsoft Windows Win32 API  и все подобные наборы API, например, COM; Java с набором символов и комбинаций; Международные Комплектующие для Юникод (ICU); библиотека Qt от Troll Technologies для программирования пользовательского интерфейса с KDE-средой настольной системы, построенной на Qt.
Библиотеки, API и протоколы, разработанные в единицах байтовой обработки текстов применяет шифрование UTF-8 , базирующееся на байтовой системе. Оно шифрует практически все символы чуть больше, чем в один байт – такие системы были связаны с изменяющимся шифрованием после их окончательного становления международными.
Сходство с ISO-10646:

В 1993 Стандартный Юникод и ISO 10646-1 были объединены, поэтому они шифруют одинаковые символы с одинаковым цифровым кодом.
ISO 10646-1 определяет 31-битное кодовое пространство со значениями от нуля до fffffff16 для 2G символов. Каноническое шифрование, именуемое UCS-4, использует 32 интегральных значения (4 байта). Альтернативное шифрование UCS-2 покрывает множество значений вплоть до ffff16 с 16-битными (2-байтными) значениями. Ни к одному из символов не было применено значение выше, чем ffff16, однако несколько интервалов свыше данного значения были установлены для личного пользования. Первоначальный стандартный Юникод также использовал 16-битные кодирующие блоки, и два стандарта использовали подобные цифровые значения, начиная с объединения, завершенного в 1993.
UTF-8, первое изменяющееся шифрование на основе байтов для двух стандартов было создано даже раньше, чем (в 1992) системы с байтовой ориентацией для помощи переключений.  Оно допускает вплоть до 6 байт за символ  для всех систем UCS-4.
Определение (в 1994) UTF-16  как изменяющегося 16-битнтго шифрования для обоих стандартов позволяло расширение кодового диапазона Юникода. UTF-32 было охарактеризовано в 1999 для того, чтобы прояснить использование символов Юникода с более ограниченным диапазоном по сравнению с UCS-4 , но совершенно новым абсолютно совместимым способом.
В 2000, группа, работающая со стандартом ISO (JTC1/SC2/WG2) согласилась исключить любые перемещения над достижимым диапазоном UTF-16, то есть свыше 10ffff16, для того, чтобы исключить любые трудности в вопросе совместимости UCS-4, UTF-8, и UTF-16. 
Следующие слайды рассматривают каждую из этих мыслей
UCS-2 в UTF-32

Функции:
Изменение типа комбинации от 16-битного интеграла до 32-битного интеграла
Преимущества:
Допущения при программировании для UCS-2 остаются нетронутыми
Каждый символ сохраняется в едином кодовом блоке и тот же тип может быть применен для обоих строк и кодов
Недостатки:
Коэффициент загрузки памяти и вероятный спад в выполнении
Так как Юникод использует только 21бит, вне 11 из 32 бит  – 33%  никогда не будут использованы.
В действительности, с тех пор, как большинству общераспространенных символов были присвоены меньшие значения, типичные приложения никогда не будут использовать более чем 50 % памяти, которую занимают строки.
В текстовой обработке необходимо переместить больше памяти из основной и виртуальной в запас центрального процессора, что может занять большего времени  выполнения, чем сокращение в действии на символ с облегченного постоянного шифрования.
UCS-2 в UTF-8

Функция
Преобразование типа строки в UTF-8, что не влияет на выбор типа данных для кодируемых точек
Преимущество
UTF-8 является широкоизвестным меняющимся шифрованием ддля Юникода. Потребление памяти выше или ниже, чем с UTF-16 в зависимости от текста.
Недостаток
Изменение библиотеки UCS-2 для использования UTF-8 вполне разрушит большинство кодов для кодовых точек ниже ffff16 так как большая часть внедрения строится на том, что специальные символы (цифры, модификаторы, элементы управления за двунаправленным текстом, и т.д.) должны быть зашифрованы каждый в единичном блоке.
Примечание
Существующие UTF-8 системы требуют уверенности, что применены 4-байтные ряды и 21-битные кодовые точки; некоторые могут допускать, что UTF-8  никогда не будут использовать более чем 3 байта за символ и что скалярные значения впишутся в 16 бит, что было в случае с Юникод 1.1
Замещающие пары для единичных символов

Функция
Копирование кодовых точек программных интерфейсов приложений путем добавления замещающих вариантов. Строки находятся в UTF-16. Абоненту нужно проверить замещающую систему памяти и вызвать функциональный вариант и продвижение по тексту одним или двумя блоками в случае повтора.
Также возможно перемещение существующих функций одной системой памяти; абонент может всегда перемещаться между текущим и предыдущим кодирующим блоком. В данном случае, в функцию должно быть возвращено число блоков, применяемых для дальнейшего повтора. Для обратного повтора могут быть предусмотрены другие шаги.
Преимущество
Программные интерфейсные приложения могут работать с 16-битными интегралами
Недостаток
Модель применения заметно усложняется. Некоторая работа по распознаванию и взаимосвязи с заменяющими устройствами должна быть сделана дважды для трудоемких интерфейсов, первый раз абонентом, и второй раз для внедрения. Программное интерфейсное приложение по себе становится более запутанным и сложным в применении. Также кодирование символов является рассматриваемым. Обсуждаемым и применяемым в скалярных величинах. Принуждение программиста к расчету замещающих величин громоздко и подвержено ошибкам.
Функциональная совместимость

Дальнейшие заключения о поддержке замещающих символов содержат вопросы изменения и функциональной совместимости.
Желательно не изменять программную модель чаще, чем положено.
Также желательно применять подобный тип строк для использования других известных и важных систем: лидирующего программного продукта Юникода в Windows Win32 и COM, а также в Java применять 16-битные Юникодные строки,  также как XML DOM спецификацию и многие другие системы -  Windows является важной платформой, Java важный язык программирования,  и в особенности для ICU, открытый синтаксический анализатор  IBM XML является одним из важнейших приложений, использующих ICU.
UTF-16 является  также отступающим шифрованием Юникода, и подает надежды на одновременное использование памяти, выполнения и простоты применения.
Это приводит к решению продолжать применять 16-битные строки в ICU.

 

Вывод

Переход шифрования Юникода с UCS-2 в UTF-16 , начавшийся в 1994 с характеристики UTF-16 и был выпущен как часть Юникода 2.0 в 19996 приобретает значимость с действующими допущениями символов свыше ffff16, исследованных в 2001. В особенности символы CJKV ожидаются в восточноазиатской текстовой обработке и по всей вероятности они примут  доступ Юникода Восточной Азии.
Программное обеспечение, использующее 16-битный Юникод, требует модифицирования в расширенный диапазон шифрования. На уровне интерфейсов прикладных программ 16-битные строки синтаксически совместимы.  Односимвольные интерфейсы прикладных программ требуют изменений, или более доступной версии, если они используют 16-битьные интегралы для Юникодовых точек. Действующие кодовые точки принимают до 21 бита.
Для передачи интерфейсов прикладных программ в замещающую поддержку существует несколько способов, и несколько из них рассматриваются в данной презентации.
Литература

 

 

ВЕРНУТЬСЯ НАЗАД