уторак, 03. јул 2007.

Кодни распореди

Шта су то кодни распореди и зашто су битни за запис ћирилице:

Зашто је уопште потребно да знате нешто о кодним распоредима?

Претпостављамо да нема корисника рачунара са стажом дужим од неколико месеци коме се није десило да наиђе на неку текстуалну датотеку, веб страницу или е-поштанску поруку која је уместо нормалног, читљивог тескта, имала нека (или чак сва) слова замењена неким чудним знацима. Можда вам се десило и да ви напишете нешто, а да се затим неко други жали како то није могао да прочита.

За све ово су одговорни управо погрешно подешени кодни распореди, односно кодирања, како се још називају. Читајте даље ако желите да сазнате како овакве ситуације можете да разрешите и избегнете.

Од датотеке са текстом до приказа на екрану

Сваки програм у коме можете читати неки текст, као што су уређивач текста, прегледач Веба и е-поштански програм, у основи читају датотеку у којој се налази текст и приказују вам тај текст на екрану. Текст је, како и све остало на рачунару, записан у облику бројева (не зове се рачунар тако за џабе). Датотека са текстом представља један низ бројева, или прецизније, бајтова; за сада можете сматрати да је бајт исто што и број, о томе касније. Дужност програма који приказује текст је да уместо тих бројева прикаже слова, тј. да декодира текст.

Програм декодира текст тако што прво прочита број из датотеке, затим погледа табелу где се налазе бројеви са придруженим изгледом (сличицом) словâ и пронађе тај број, и коначно прикаже слово уз тај број. Затим тако за следећи број, све до краја датотеке. Управо та табела у којој се налазе парови број-слово представљају кодни распоред (колекција самих сличица словâ чини фонт).

Где онда настаје проблем, зашто понекад добијате „ђубре" уместо слова? Проблем је у томе што парови број-слово нису увек исти, тј. постоје различите табеле кодних распореда. Да би програм исправно приказао текст, он мора знати коју табелу, тј. кодни распоред да употреби. Ако употреби погрешан, ето ђубрета. Нпр. у кодном распореду ISO-8859-5 пар броју 177 је слово „Д", а у распореду CP1251 слово „ґ" ; дакле, ако се текст кодиран са ISO-8859-5 декодира према CP1251, уместо сваког слова „Д" појавиће се слово „ґ".

Можете се запитати да ли програм некако сам може да утврди којим распоредом је текст кодиран? У општем случају, не може: замислите да се у тексту налази само једно слово, представљено горепоменутим бројем 177; у том случају, програм нема никакву додатну информацију да одреди према ком распореду (да ли ISO-8859-5, CP1251 или неки трећи) би требало да декодира то слово.

Али се онда можете запитати и како то да често и добијате исправно декодиран текст, што значи да је програм ипак правилно одредио кодни распоред? У овом случају, ствар је у томе што постоје неки облици датотека које у себи садрже и информацију о томе којим распоредом текст треба да се декодира. Такве су нпр. HTML датотеке, које приказује ваш веб прегледач када одете на неки интернет сајт или е-поруке које гледате у поштанском програму. Међутим, да би ово радило, онај који прави датотеку мора да поштује начин на који се наводи распоред, а и програм који је чита мора бити правилно испрограмиран да то препозна. Нажалост, нешто од овога често закаже, па се зато деси и да на Интернету или у е-порукама понекад видите „ђубре", тј. погрешно декодиран текст.

Различитих кодних распореда има буквално на десетине. Поред тога што се разликују по паровима број-слово, разликују се и по томе што не покривају сви све језике, прецизније сва слова свих језика. Нпр. поменути ISO-8859-5 је један од распореда који покрива ћирилично писмо (српско, руско, бугарско...), а нпр. ISO-8859-2 покрива источноевропска латинична писма (хрватско, чешко, пољско...). Дакле, помоћу ISO-8859-5 не можете кодирати текст на чешком језику, а помоћу ISO-8859-2 не можете кодирати текст на бугарском језику.

Вероватно већ видите могуће решење ових проблема: било би добро када би постојао само један договорени кодни распоред који би обухватао сва слова на свету и који би сви користили (у ствари, сигурно се питате и откуд уопште толико различитих кодних распореда — одговор, наравно, лежи у мутним водама рачунарске историје). Такав јединствен кодни распоред заправо постоји и назива се Уникод (енг. Unicode), и постаје све више распрострањен. Нажалост, и ту има једно али...

Различити записи Уникода

Сада морамо да се вратимо на други пасус претходног дела, у коме смо рекли да се датотека састоји од бајтова, које можете сматрати бројевима. Сада је време да објаснимо за ову причу битну разлику између бајта и броја. Наиме, бајт јесте број, али само у опсегу од 0 до 255! Другим речима, помоћу једног бајта, не можемо записати нпр. број 348.

С друге стране, програми су (до скоро) најчешће програмирани тако да сматрају да један бајт кодира једно слово, па су то подразумевали и при декодирању текста. То је и један од разлога откуд онолико различитих кодних распореда; већ када бисмо покушали да у један кодни распоред ставимо латиницу, са специфичним словима из свих језика који је користе, и ћирилицу, опет са свим словима, остали бисмо без бројева за кодирање. А да не помињемо грчко, арапско и далекоисточна писма — број потребних бројева се пење на десетине хиљада!

Уникодом су управо дефинисане те десетине хиљада парова број-слово, али како те бројеве записати у датотеци, када бајт може бити само између 0 и 255? Проблем управо овде и настаје, јер постоји више могућности, од којих свака има своје предности и мане. Нпр. број се може записивати увек са два бајта, или са променљивим бројем бајтова.

Због различитих начина записа, и са Уникодом вам се може десити видите погрешно декодиран текст (ако је програму задат погрешан запис). Међутим, изгледа да се тзв. UTF8 запис полако устаљује као најпогоднији — основна карактеристика му је да ће многи програми који уопште нису програмирани тако да раде са Уникодом ипак моћи правилно да раде са UTF8 кодираним текстом. Зато ће текст кодиран Уникодом на који наиђете најчешће бити у UTF8 запису.

Практични савети

Шта да радите када видите погрешно декодиран текст? Ако је иоле новији, програм који користите за преглед тог текста ће највероватније имати опцију да му ручно задате кодни распоред, често у главном менију Приказ View), ставка Кодирање (енг. Encoding). Ту можете да задате који распоред треба да се употреби за декодирање, па испробавањем можете наћи онај којим ће текст бити правилно декодиран. Ако је текст на српском, а искварен тако да је већина слова латинична, само су нека избрљана, онда прво покушајте са кодним распоредом UTF8, затим ISO-8859-2, и на крају CP1250. Ако су сва слова избрљана, онда је текст писан ћирилицом, и тада испробајте редом распореде UTF8, ISO-8859-5 и CP1251.

Што се тиче обичних текстуалних датотека (најчешће имају наставак „.txt" у имену), морате знати (испробати) којим кодним распоредом је текст кодиран и ручно га поставити. Међутим, ако се погрешно декодирање дешава у е-поруци или на веб страни, онда је ручно постављање кодирања само тренутна мера. Пошто то не би требало да се дешава, требало би да откријете да ли је проблем до програма који користите, или до садржаја (веб стране, е-поруке) који гледате. Сетите се, ако је датотека правилно записана и програм коректно испрограмиран, кодни распоред би требало да буде аутоматски детектован. Ако је лоше записано то што гледате, обавестите онога ко је то направио (пошиљаоца е-поруке или веб мастера интернет сајта). Ако је проблем у вашем програму, ажурирајте га на новију верзију или испробајте неки други програм.

Када ви лично правите садржај — шаљете е-поруку, пишете у текстуалну датотеку или правите веб-страну — гледајте да обавезно користите уникод кодирање са UTF8 записом. Као што рекосмо, Уникод је замена за све претходне кодне распореде (какви су поменути ISO- и CP-распореди) и подржава ћирилицу и латиницу истовремено. Као и програм за прегледање садржаја, и програм у коме правите садржај ће имати негде опцију за бирање кодног распореда.

Неки проблеми при приказивању текста који немају везе са кодним распоредима

Може се понекад десити да је текст избрљан тако да се уместо појединих слова приказују нпр. квадратићи, док су остала слова у реду. То је скоро сигуран знак да фонт (колекција изгледа слова) који користите нема у себи та слова. Пошто Уникод дефинише десетине хиљада симбола, лако вам је да замислите да немају сви фонтови све симболе садржане у себи, тј. да су неки фонтови „комплетнији" од других. Поправка за ово је да се пребаците на неки фонт који има тражене симболе.

Ноћна мора звана Јуски

Други чест проблем је да уместо неких наших слова видите отворене и затворене угласте и велике заграде и још по неке уобичајене симболе тамо где им није место. Ово је знак да је текст писан употребом тзв. јуски (енг. YUSCII) фонтова, код којих су поменуте заграде буквално замењене нашим словима. Тј. није употребљено никакво посебно кодирање, већ су енглеска слова и симболи у фонту одстрањени у корист наших. Ово је нешто најгоре на шта можете да наиђете: с једне стране, текст зависи од тога који се фонт користи и зато уз текст увек морају да се испоручују и сами фонтови (текст мора да зависи само од кодирања!), а с друге стране ти фонтови су направљени нестручним преправљањем стандардних фонтова, тако да су лошег квалитета (у смислу изгледа на екрану и папиру). Јуски је настао почетком деведестих као брзо решење за употребу српског језика на рачунарима, када није постојао ниједан кодни распоред који би покрио српски језик (ни ISO- ни CP- ни Уникод, ништа). У том смислу, не може му се много замерити како је настао, али чињеница да се и данас често може наћи је готово неопростива, посебно имајући у виду да постоје конвертори текста којима јуски може да се пребаци у нормалан кодни распоред. Избегавајте јуски по сваку цену!

Кратка напомена читаоцима и уредницима

Овај текст је замишљен као представљање концептуалних појмова о кодним распоредима и њиховој употреби. Циљ је да читалац схвати чему кодни распореди служе и како се може њима манипулисати у случају потребе. Техничка прецизност текста је у другом плану, те је не треба усложњавати ако не доприноси наведеном циљу.

Нема коментара: