Metodii.com
BulgarianEnglishGreekRussian
Стандарти, свързани с Unicode

     Сайтът 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)
 Обратно към: