[an error occurred while processing this directive] Последние изменения внесены 1.04.2002 [an error occurred while processing this directive]Понимая актуальность затронутой в этом документе информации, мы позволили себе отступить от принятой нами (изрядко, кстати, устаревшей) практики перевода документов вручную и воспользовались услугами Internet-переводчика Translate.ru. По причине срочности пришлось отказаться и от редактирования документа, который представлен в "первозданном" виде.
Если вы хотите включиться в разработку нового перспективного направления, выскажите свои мысли в форуме
Рабочая группа Сети М. Крайспина Рекста для Комментариев: 4042 Панды, Программируя Категорию: Информационный 1 апреля 2005 UTF-9 и Эффективные Форматы Преобразования UTF-18 Уникоуд Статус Этой Записки Эта записка обеспечивает информацию для интернет-сообщества. Это не определяет интернет-стандарт любого вида. Распределение этой записки неограниченно. Уведомление об авторском праве Copyright (C) The Internet Society (2005). Резюме Международная Организация по Стандартизации 10646 определяет большой набор символов, названный Универсальным Набором символов (УКС), который охватывает большинство всемирных устройств записи. Тот же самый набор кодепоинтс определен Уникоуд, который далее определяет дополнительные свойства характера и другие детали выполнения. Политикой уместных комитетов стандартизации, изменения к Уникоуд и поправкам и дополнениям к Международной Организации по Стандартизации/МЕЖДУНАРОДНОЙ ЭЛЕКТРОТЕХНИЧЕСКОЙ КОМИССИИ 10646 следов друг друг, так, чтобы репертуары характера и кодовые назначения пункта остались в синхронизации. Текущие форматы представления для Уникоуд (UTF-7, UTF-8, UTF-16) не хранение и вычисление, эффективное на платформах, которые используют 9 битов нонет как естественная единица хранения вместо октета на 8 битов. Этот документ описывает формат преобразования Уникоуд, который использует в своих интересах нонет так, чтобы формат был хранением и эффективным вычислением. 1. Введение Множество интернет-участков использует платформы, которые не основаны на традиционном 8-битовом байте или октете. Одна такая платформа - ПДП-10, который является основанным на 36-битовом слове. На этих платформах, расточительно представить данные в октетах, так как 4 бита оставляют неиспользованными в каждом слове. 9-битовый нонет - намного более заметное представление. Хотя эти платформы поддерживают стандарты ИТФ, многие из этих платформ все еще используют представление текста, основанное на семиразрядном байте, Крайспин Информэйшнал [Страница 1] РФК 4042 UTF-9 и UTF-18 1 апреля 2005 который является только подходящим для [американского ASCII] (хотя это использовалось для различной Международной Организации по Стандартизации 10646 национальных вариантов). Чтобы максимизировать международную и многоязычную способность к взаимодействию, ИАБ рекомендовал ([ИАБ-СИМВОЛЬНЫЙ]), что [Международная Организация по Стандартизации 10646], быть неплатежом закодировала набор символов. Хотя другие форматы преобразования [УНИКОУД] существуют, и очевидно могут использоваться на нонет-ориентируемых машинах (наиболее особенно [UTF-8]), они переносят существенные неудобства: [UTF-8] требует, чтобы один - три октета представили кодепоинтс в Основном Многоязычном Самолете (БМП), четыре октета, чтобы представить [УНИКОУД] кодепоинтс вне БМП, и шести октетов, чтобы представить не - [УНИКОУД] кодепоинтс. Когда сохранено в нонетс, это приводит целых к четырем потраченным впустую битам в характер [УНИКОУД]. [UTF-16] требует, чтобы хексейдсет представил кодепоинтс в БМП, и двух хексейдсетс, чтобы представить [УНИКОУД] кодепоинтс вне БМП. Когда сохранено в нонет парах, это приводит целых к четырем потраченным впустую битам в характер [УНИКОУД]. Этот формат преобразования требует, чтобы сложные заместители представили кодепоинтс вне БМП, и не может представить не - [УНИКОУД] кодепоинтс вообще. [UTF-7] требует, чтобы один - пять семиразрядных байтов представили кодепоинтс в БМП, и целых восемь семиразрядных байтов, чтобы представить кодепоинтс вне БМП. Когда сохранено в нонетс, это приводит целых к шестнадцати потраченным впустую битам в характер. Этот формат преобразования требует очень сложной и в вычислительном отношении дорогой перемены и "измененный BASE64" обработка, и не может представить не - [УНИКОУД] кодепоинтс вообще. В сравнении, UTF-9 использует один - два нонетс, чтобы представить кодепоинтс в БМП, три нонетс, чтобы представить [УНИКОУД] кодепоинтс вне БМП, и трех или четырех нонетс, чтобы представить не - [УНИКОУД] кодепоинтс. Нет никаких потраченных впустую битов, и поскольку примеры в этом документе демонстрируют, вычислительная обработка минимальна. Преобразование между [UTF-8] и UTF-9 является прямым, с большинством сложности в обработке [UTF-8]. Надеется, что будущие расширения к протоколам, типа СМТП разрешат использование UTF-9 в этих протоколах между нонет платформами без использования [UTF-8] как "на проводном" формате. Крайспин Информэйшнал [Страница 2] РФК 4042 UTF-9 и UTF-18 1 апреля 2005 Точно так же преобразование между [УНИКОУД] кодепоинтс и UTF-18 также весьма просто. Хотя (как UCS-2) UTF-18 только представляет подмножество доступного [УНИКОУД] кодепоинтс, это охватывает нечастные кодепоинтс, которые в настоящее время назначаются в [УНИКОУД]. 1.1. Соглашения, Используемые в Этом Документе Ключевые слова "ДОЛЖНЫ", "НЕ ДОЛЖЕН", "ТРЕБУЕМЫЙ", "НЕ БУДЕТ", "БЫТЬ" "ДОЛЖЕН", "НЕ ДОЛЖЕН", "РЕКОМЕНДОВАННЫЙ", "МОЧЬ", и "ДОПОЛНИТЕЛЬНЫЙ" в этом документе должны интерпретироваться как описано в КОММУНИСТИЧЕСКОЙ ПАРТИИ ВЕЛИКОБРИТАНИИ 14, РФК 2119 [КЛЮЧЕВЫЕ СЛОВА]. 2. Краткий обзор UTF-9 кодирует [УНИКОУД] кодепоинтс в низких битах заказа 8 нонет, используя высокий бит заказа, чтобы указать продолжение. Заместители не используются. [УНИКОУД] кодепоинтс в диапазоне U+0000 - U+00FF ([американский ASCII] и латинский 1) представлены единственным нонет; кодепоинтс в диапазоне U+0100 - U+FFFF (остаток от БМП) представлены двумя нонетс; и кодепоинтс в диапазоне U+1000 - U+10FFFF (остаток от [УНИКОУД]) представлены тремя нонетс. Не - [УНИКОУД] кодепоинтс в [Международная Организация по Стандартизации 10646] (то есть, кодепоинтс в диапазоне 0x110000 - 0x7fffffff) может также быть представлен в UTF-9 очевидным расширением, но это не обсуждено далее, поскольку эти кодепоинтс были удалены от [Международная Организация по Стандартизации 10646] Международной Организацией по Стандартизации. UTF-18 кодирует [УНИКОУД] кодепоинтс в Основном Многоязычном Самолете (БМП, самолет 0), Дополнительный Многоязычный Самолет (СМП, самолет 1), Дополнительный Идеографический Самолет (ГЛОТОК, самолет 2), и Дополнительный Самолет Специального назначения (ССП, самолет 14) в единственной 18-битовой ценности. Это не кодирует самолеты 3, хотя 13, которые являются в настоящее время неиспользованными; ни самолеты 15 или 16, которые являются частными местами. Обычно, UTF-9 и UTF-18 должны только использоваться в контексте хранения на 9 битов и транспорта. Хотя некоторые протоколы, например, [ПРОГРАММА ПЕРЕДАЧИ ФАЙЛОВ], транспорт поддержки нонетс, текущий набор протокола ИТФ является весьма несовершенным в этой области. ИТФ убежден принять меры, чтобы улучшить поддержку протокола ИТФ нонетс. 3. Определение UTF-9 Поток UTF-9 представляет [Международную Организацию по Стандартизации 10646] кодепоинтс использование 9 битов нонетс. Низкие 8 битов заказа нонет - октет, и высокий бит заказа указывает продолжение. Крайспин Информэйшнал [Страница 3] РФК 4042 UTF-9 и UTF-18 1 апреля 2005 UTF-9 не использует заместителей; следовательно ценность UTF-16 должна быть преобразована в эквивалент UCS-4, и U+D800 - U+DBFF никогда не передаются в UTF-9. Октеты [УНИКОУД] кодепоинт ценность тогда скопированы в последовательный UTF-9 нонетс, начинающийся с наиболее - существенного октета отличного от нуля. Все кроме наименее существенного октета имеют набор бита продолжения в связанном нонет. Примеры: Название UTF-9 Характера (в октальном) ----------------------------- U+0041 ЛАТИНСКАЯ ЗАГЛАВНАЯ БУКВА 101 ЛАТИНСКАЯ ЗАГЛАВНАЯ БУКВА U+00C0 С СЕРЬЕЗНЫМИ 300 ГРЕЧЕСКИМИ АЛЬФАМИ ЗАГЛАВНОЙ БУКВЫ U+0391 403 221 U+611B 541 33 ГОТИЧЕСКИХ ПИСЬМА U+10330 АХСА 401 403 60 ПРИЗНАКОВ U+E0041 ЛАТИНСКАЯ ЗАГЛАВНАЯ БУКВА 416 400 101 U+10FFFD 420 777 375 0x345ecf1b (ценность UCS-4 не в [УНИКОУД]) 464 536 717 33 4. Определение UTF-18 Поток UTF-18 представляет [Международную Организацию по Стандартизации 10646] кодепоинтс использование пары 9 битов нонетс, чтобы сформировать 18-битовую ценность. UTF-18 не использует заместителей; следовательно ценность UTF-16 должна быть преобразована в эквивалент UCS-4, и U+D800 - U+DBFF никогда не передаются в UTF-18. [УНИКОУД] кодепоинт ценности в диапазоне U+0000 - U+2FFFF скопированы как та же самая ценность в ценность UTF-18. [УНИКОУД] кодепоинт ценности в диапазоне U+E0000 - U+EFFFF скопированы как ценности 0x30000 - 0x3ffff; то есть, эти ценности перемещены 0x70000. Другие ценности кодепоинт не могут быть представлены в UTF-18. Примеры: Название UTF-18 Характера (в октальном) ----------------------------- U+0041 ЛАТИНСКАЯ ЗАГЛАВНАЯ БУКВА 000101 ЛАТИНСКАЯ ЗАГЛАВНАЯ БУКВА U+00C0 С СЕРЬЕЗНЫМИ 000300 ГРЕЧЕСКИМИ АЛЬФАМИ ЗАГЛАВНОЙ БУКВЫ U+0391 001621 U+611B 060433 ГОТИЧЕСКИХ ПИСЬМА U+10330 АХСА 201460 ПРИЗНАКОВ U+E0041 ЛАТИНСКАЯ ЗАГЛАВНАЯ БУКВА 600101 Крайспин Информэйшнал [Страница 4] РФК 4042 UTF-9 и UTF-18 1 апреля 2005 5. Типовые Рутины 5.1. [УНИКОУД] Кодепоинт к Преобразованию UTF-9 Следующие рутины демонстрируют преобразование от UCS-4 до UTF-9. Для простоты, эти рутины не делают никакой проверки законности. Рутины, используемые в заявлениях ДОЛЖНЫ отклонить недействительные последовательности UTF-9; то есть, первый нонет с ценностью 400 октальный (0x100), или последовательности, которые приводят к тому, чтобы выходить за пределы (превышающий 0x10ffff для [УНИКОУД]), или кодепоинтс, используемого для заместителей UTF-16. ; Возвратить ценность UCS-4 из вереницы UTF-9 (версия собрания PDP-10) ; Принимает: п1/9-битовый указатель байта на вереницу UTF-9 ; Возвращения +1: Всегда, т1/UCS-4 ценность, п1/обновленный указатель байта ; Ударяет T2 UT92U4: ТДЗА T1, T1; начало с нолем U92U41 : КСОР T1, T2; октет вставки в UCS-4 оценивает ЛШ T1, ^D8; переместите ценность UCS-4 ИЛДБ T2, P1; получите следующий нонет ТРЗ T2,400; октет извлечения, какое-нибудь продолжение? ДЖРСТ U92U41; да, продолжите КСОР T1, T2; вставьте заключительный октет ПОПДЖ P, /* Возвратить ценность UCS-4 из вереницы UTF-9 (C, версия) * Принимает: указатель на указатель на UTF-9 натягивает * Возвращения: характер UCS-4, нонет указатель обновил */ UINT31 UTF9_to_UCS4 (UINT9 ** utf9PP) { UINT9 нонет; UINT31 ucs4; для (ucs4 = (нонет = * (*utf9PP) ++) и 0xff; нонет и 0x100; ucs4 | = (нонет = * (*utf9PP) ++) и 0xff) ucs4 <<= 8; return ucs4; } 5.2. UTF-9 to UCS-4 Conversion The following routines demonstrate conversion from UTF-9 to UCS-4. For simplicity, these routines do not do any validity checking. Routines used in applications SHOULD reject invalid UCS-4 codepoints; that is, codepoints used for UTF-16 surrogates or codepoints with values exceeding 0x10ffff for [UNICODE]. Crispin Informational [Page 5] RFC 4042 UTF-9 and UTF-18 1 April 2005 ; Write UCS-4 character to UTF-9 string (PDP-10 assembly version) ; Accepts: P1/ 9-bit byte pointer to UTF-9 string ; T1/ UCS-4 character to write ; Returns +1: Always, P1/ updated byte pointer ; Clobbers T1, T2; (T1, T2) must be an accumulator pair U42UT9: SETO T2, ; we'll need some of these 1-bits later ASHC T1,-^D8 ; low octet becomes nonet with high 0-bit U32U91: JUMPE T1,U42U9X ; done if no more octets LSHC T1,-^D8 ; shift next octet into T2 ROT T2,-1 ; turn it into nonet with high 1 bit PUSHJ P,U42U91 ; recurse for remainder U42U9X: LSHC T1,^D9 ; get next nonet back from T2 IDPB T1,P1 ; write nonet POPJ P, /* Write UCS-4 character to UTF-9 string (C version) * Accepts: pointer to nonet string * UCS-4 character to write * Returns: updated pointer */ UINT9 *UCS4_to_UTF9 (UINT9 *utf9P,UINT31 ucs4) { if (ucs4 > 0x100) { если (ucs4> 0x10000) { если (ucs4> 0x1000000) *utf9P ++ = 0x100 | ((ucs4>> 24) и 0xff); *utf9P ++ = 0x100 | ((ucs4>> 16) и 0xff); } *utf9P ++ = 0x100 | ((ucs4>> 8) и 0xff); } *utf9P ++ = ucs4 и 0xff; возвратите utf9P; } 6. Опыт Выполнения Поскольку типовые рутины демонстрируют, весьма просто осуществить UTF-9 и UTF-18 на нонет-базирующейся архитектуре. Более сложные рутины могут быть найдены в ftp: // panda.com/tops-20/utools.mac.txt или от линглинг.панда.ком через файл УТУЛС.МАК через АНОНИМНЫЙ [ПРОГРАММА ПЕРЕДАЧИ ФАЙЛОВ]. Крайспин Информэйшнал [Страница 6] РФК 4042 UTF-9 и UTF-18 1 апреля 2005 Мы находимся теперь в процессе осуществления поддержки нонет-базирующимся файлам текста и автоматизированному преобразованию между семиразрядным байтом, октетом, и нонет текстовыми данными. 7. Ссылки 7.1. Нормативные Ссылки Постэль [ПРОГРАММА ПЕРЕДАЧИ ФАЙЛОВ], J. и J. Реинолдс, "Протокол Передачи Файла", СТАНД. 9, РФК 959, октябрь 1985. [ИАБ-СИМВОЛЬНЫЙ] Веидер, C., Престон, C., Симонсен, K., Алвестранд, H., Аткайнсон, R., Крайспин, M., и P. Сванберг, "Сообщение Симпозиума Набора символов ИАБ, проведенного 29 февраля - 1 марта 1996", РФК 2130, апрель 1997. [Международная Организация по Стандартизации 10646] Международная Организация для Стандартизации, "Информационная Технология - Универсальный Многократный октет закодировала Набор символов (УКС)", Стандарт Международной Организации по Стандартизации/МЕЖДУНАРОДНОЙ ЭЛЕКТРОТЕХНИЧЕСКОЙ КОМИССИИ 10646, состоявший из 10646-1:2000 Международной Организации по Стандартизации/МЕЖДУНАРОДНОЙ ЭЛЕКТРОТЕХНИЧЕСКОЙ КОМИССИИ, "Информационная технология - Универсальный Многократный октет Закодированный Набор символов (УКС) - Часть 1: Архитектура и Основной Многоязычный Самолет", 10646-2:2001 Международная Организация по Стандартизации/МЕЖДУНАРОДНАЯ ЭЛЕКТРОТЕХНИЧЕСКАЯ КОМИССИЯ, "Информационная технология - Универсальный Многократный октет Закодированный Набор символов (УКС) - Часть 2: Дополнительные Самолеты" и Международная Организация по Стандартизации/МЕЖДУНАРОДНАЯ ЭЛЕКТРОТЕХНИЧЕСКАЯ КОМИССИЯ 10646-1:2000 /Amd 1:2002, "Математические символы и другие характеры". [КЛЮЧЕВЫЕ СЛОВА] Браднер, S., "Ключевые слова для использования в РФКС, чтобы Указать Уровни Требования", КОММУНИСТИЧЕСКАЯ ПАРТИЯ ВЕЛИКОБРИТАНИИ 14, РФК 2119, март 1997. [УНИКОУД] Консорциум Уникоуд, "Стандарт Уникоуд - Версия 3.2", определенная по Стандарту Уникоуд, Версия 3.0 (Чтение, MA, Addison-Уэсли, 2000. ISBN 0-201-61633-5), как исправлено Стандартным Приложением *27 Уникоуд: Уникоуд 3.1 и Стандартным Приложением *28 Уникоуд: Уникоуд 3.2, март 2002. 7.2. Информативные Ссылки [Американский ASCII] американский Национальный Институт Стандартов, "Закодированный Набор символов - 7-битовый американский Стандартный Кодекс для Информационного Обмена", АНСИ X3.4, 1986. [UTF-16] Хоффман, P. и F. Йерджео, "UTF-16, зашифровывание Международной Организации по Стандартизации 10646", РФК 2781, февраль 2000. Крайспин Информэйшнал [Страница 7] РФК 4042 UTF-9 и UTF-18 1 апреля 2005 [UTF-7] Ювелир, D. и М. Дэвис, "UTF-7 Безопасный почтой Формат Преобразования Уникоуд", РФК 2152, май 1997. [UTF-8] Соллинс, K., "Архитектурные Принципы Однородного Решения Названия Ресурса", РФК 2276, январь 1998. 8. Рассмотрения Безопасности Как с UTF-8, UTF-9 может представить кодепоинтс, которые не находятся в [УНИКОУД]. Заявления должны утвердить вереницы UTF-9, чтобы гарантировать, что все кодепоинтс не превышают максимум [УНИКОУД] U+10FFFF. Типовые рутины в этом документе - например цели, и не делают никакой попытки утвердить их аргументы, например, тест на выходят за пределы ([УНИКОУД] ценности, большие чем 0x10ffff) или кодепоинтс, используемый для заместителей. Помимо того, чтобы приводить к недействительным данным, это может также создать тайные каналы. 9. Рассмотрения IANA IANA должно зарезервировать названия чарсет "UTF-9" и "UTF-18" для будущего назначения. Адрес Автора Марк Р. Крайспин Панда, Программирующий 6158 Петель Аркана НЕОНА Остров Бэйнбриддж, ВА 98110-2098 Телефон: (206) 842-2385 ЭЛЕКТРОННЫХ ПОЧТ: UTF9@Lingling. Панда. КОМ Крайспин Информэйшнал [Страница 8] РФК 4042 UTF-9 и UTF-18 1 апреля 2005