|
Сайт 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) |
Назад к:
|