Mefodi.com
BulgarianEnglishGreekRussian
Стандарты связанные с Unicode

     Сайт Mefodi.com взял на себя создание и поддержку трех стандартов, связанных с Unicode. Надеемся, что в будущем эта работа будет осуществляться Unicode Консорциумом, но до тех пор попробуем помочь себе сами.

     Предложенные нами стандарты связаны с тремя основными проблемами: преобразование из Unicode в 8-битовую кодовую таблицу, поиск текста в Unicode файле и изображение Unicode символов, отсутствующих в шрифте.

     Мы планируем предоставить нашим потребителям не только стандарт, но и софтверный код, который поддерживает этот стандарт. Нам кажется глупой идея о том, что каждая фирма должна создавать такой софтвер и поддерживать его при изменениях в стандарте. Поэтому мы планируем создание библиотеки, в которую будут входить все функции, необходимые для работы с Unicode. Таковой является функция, преобразующая коды маленьких букв в коды соответствующих им больших букв, а также функция, которая возвращает информацию о виде Unicode символа (буква, цифра или знак препинания).
 
 

Преобразование из Unicode в 8-битовую кодовую таблицу

     При преобразовании из Unicode в 8-битовую кодовую таблицу перед нами стоит вопрос, каким образом отобразить 96000 символов в 256. Эта проблема похожа на задачу, как разместить слона в спичечной коробке. При решении таких задач обычно жертвуют частью слона. Например, в настоящий момент большинство программ осуществляют это преобразование заменой всех отсутствующих символов вопросительными.

В результате этого, предложение:

На компьютере инсталлирована операционная система Windows Vista.

может превратиться в бессмыслицу:

?? ?????????? ????????????? ???????????? ??????? Windows Vista.

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

     Возьмем для примера слово Müller и задумаемся, как лучше всего трансформировать его в 8-битовую кодовую таблицу, не содержащую букву ü. Обсудим три варианта:
 
 
M?ller Muller Mueller

     Первый вариант самый плохой и мы не рекомендуем его. Второй вариант лучше и используется в большинстве прикладных программ. Третий вариант самый лучший, потому что произошел из машинописной практики.

     Иными словами, рассматриваемая нами проблема не новая; ее решили еще около двух веков назад, когда стали использовать пишущие машинки. Тогда перед ними стоял вопрос как представить всевозможные рукописные знаки в виде сотни машинописных символов. Эта проблема очень похожа на рассматриваемую нами и даже еще труднее. Вопрос о переходе к машинописи все-таки уже решен и создана традиция, какой комбинацией машинописных символов заменяется каждый рукописный символ. От нас требуется только обобщить эту традицию и описать ее в виде стандарта.

Здесь Вы можете ознакомиться с первоначальным вариантом этого стандарта. Кроме использования традиций машинописи, мы применяли и транслитерацию, которую тоже можно рассматривать как часть традиции машинописи. Например, предложение:

На компьютере инсталлирована операционная система Windows Vista.

превратится в:

Na komp'jutere installirovana operacionnaja sistema Windows Vista.

которое неудобно для чтения, но предпочтительнее бессмыслицы:

?? ????????? ? ??????????? ????????????? ??????? Windows Vista.
 

     Для большинства Unicode символов предложен только один вариант замены, но это не обязательно. Например болгарское "И с ударением" (И grave) по традиции машинописи заменяется на Й, но эта буква тоже может отсутствовать, и тогда по принципу транслитерации заменим ее на J.

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

     Первый вариант

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

Поиск текста в Unicode файле

     Поиск текста в Unicode файле является серьезной проблемой, осознанной Unicode Консорциумом. Для ее решения у них созданы две нормальные формы Unicode текстов (точнее говоря, нормальных форм четыре, но мы будем рассматривать только NFC и NFKC, потому что две другие формы являются их производными). С математической точки зрения NFC и NFKC соответствуют двум реляциям эквивалентности и NFC соответствует более мелкая из них. Иными словами, если два текста имеют одну и ту же нормальную форму в NFC, то они очень похожи друг на друга, и мы можем считать их неразличимыми. С другой стороны, если у них одна и та же нормальная форма в NFKC, то они похожи в меньшей степени и подобны, но нельзя сказать, что неразличимы. В какой-то степени NFKC считается с традициями машинописи и воспринимает символ ½ и текст 1/2 как одинаковые.

     Таким образом, мы хотим на основе традиций машинописи и транслитерации стандартизировать третью реляцию эквивалентности, которая крупнее реляции, соответствующей NFKC. Т.е. это будет реляция, которая задает подобие слабее подобия NFKC и намного слабее подобия NFC.

     Некоторые Internet поисковики используют аналогичное подобие. Например, они ищут буквы с диакритическими знаками как с ними, так и без них. Если ищете Müller, получите и его, и Muller. Мы бы хотели создать еще более слабое подобие, включающее и Mueller.
 

Изображение Unicode символов, отсутствующих в шрифте

     Сейчас это происходит не лучшим образом: все отсутствующие символы заменяются символами по умолчанию соответствующего шрифта. Обычно для этой цели используется квадратик.

     По крайней мере, при подобной трансформации нужно использовать нормальную форму NFC. Например, символ И с ударением (U+040D) и последовательность И с сильным ударением (U+0418 U+0300) эквивалентны относительно NFC. Т.е. если в шрифте отсутствует символ И с ударением (U+040D), то вместо квадратика нужно изобразить автоматически генерированное изображение И с сильным ударением (хотя, может быть, это автоматически генерированное изображение выглядит весьма некрасиво). И наоборот, если в шрифте есть И с ударением, то этот символ должен изображаться, когда имеем последовательность И с сильным ударением (U+0418 U+0300) вместо автоматически генерированного И с сильным ударением, потому что символ, имеющийся в шрифте, скорее всего лучше автоматически генерированного изображения.

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

     Это возможное изменение во время визуализации не должно влиять на суть текста, и при Copy и Paste он должен оставаться тем же (той же последовательностью Unicode символов с тем же шрифтом).
 
 
Пишите нам: kiril@2-box.net (защищенный e-mail)
 Назад к: