|
Сайтът Metodii.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 kompjutyra e instalirana operacionnata 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) |
Обратно към:
|