Представљање ненумеричких података

Да би се у рачунару могли представити и подаци који нису бројеви, потребно је извршити њихово кодовање. Овај чланак се првенствено бави представљањем алфанумеричких података, односно слова, знакова интерпункције, математичких операција и слично. О представљању осталих врста ненумеричких података (звук, графика, видео…) – неки други пут.

Под појмом кодовање подразумева се прављење табеле у којој сваком алфанумеричком знаку одговара једна комбинација битова (одговарајуће дужине). Историјски најстарији код за представљање алфанумеричких знакова је ASCII код. Он се појавио са првом појавом рачунара, када је дужина процесорске, односно меморијске речи била 8 битова, и омогућавао је приказ само слова енглеске абецеде. Временом се појавила потреба да се приказују и неки други симболи (слова која припадају неким другим језицима), па су се појављивали различити стандарди – кодне стране. И на крају је, да би се једним кодом објединили сви светски језици развијен уникод стандард, који се и данас користи.

ASCII код

ASCII је скраћеница од почетних слова реченице ‘American Standard Code for Information Interchange’, што преведено значи: Амерички стандардни код за размену информација. Током развоја рачунара дефинисано је више варијанти овога кода.
То је осмобитни кôд (кôд чија је дужина 8 бита), који омогућава приказ великих и малих слова, специјалних знакова (на пример, *, +, =, ?, $, %, итд.), те управљачких знакова (на пример: почетак поруке, крај поруке, нови ред, итд.).

Укупно је са осам бита могуће приказати 256 (28=256) различитих знакова. Међутим, првих 128 знакова је заиста стандардизовано (и то је, у ствари ASCII код), а преосталих 128 није јединствено стандардизовано.

Кодне стране

Да би постојала подршка за више језика, смишљане су тзв. кодне стране (Code Page) које дефинишу понашање тог додатног скупа знакова, односно оних преосталих 128 знакова из ASCII кода, који нису стандардизовани. Основна кодна страна на персоналним рачунарима (PC437) у том горњем скупу знакова дефинише разне графичке знакове за приказивање графичких симбола у тексту (не треба заборавити да се све ово дешава у време када су оперативни системи били текстуално оријентисани): ♠♣♥♦ и слично. Касније је развијено још пуно кодних страна које подржавају одређене језике.

Две фамилије кодних страна се користе на нашем поднебљу:

1) ISO-8859 фамилија стандардизована од стране међународне организације за стандардизацију

  • ISO_8859-1 – Latin-1 – Поред ASCII симбола, дефинише латиничне симболе коришћене у западноевропским језицима
  • ISO_8859-2 – Latin-2 – Поред ASCII симбола, дефинише латиничне симболе коришћене у централноевропским језицима (између осталог и: š, ć, đ, č и ž)
  • ISO_8859-5 – Latin-5 – Поред ASCII симбола, дефинише ћириличне симболе

2) windows – 125x развијена од стране компаније Мајкрософт

  • windows-1250 – Мајкрософтова кодна страна која поред ASCII симбола дефинише латиничне симболе коришћене у централноевропским језицима (између осталог и: š, ć, đ, č и ž)
  • windows-1251 – Мајкрософтова кодна страна која поред ASCII симбола дефинише и ћириличне симболе

Поред ових, за ћирилицу постоји и кодна страна KOI8-R, која је првенствено дизајнирана за руску ћирилицу.

Основни проблем са кодним странама је то што се међусобно искључују, тј. цео документ мора да буде написан истим писмом, односно у истој кодној страни.

Уникод

Постоји више верзија Уникода. Основна верзија је двобајтни формат записа до 216 = 65536 знакова. Њен назив је UCS-2 зато што користи два бајта. Са тих 65536 знакова решен је проблем записа скоро свих постојећих писама. Овај тип Уникода се назива Plain UCS-2 или UTF-16.

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

Прво је развијена Уникод трансформациона шема са основном јединицом од 8 бита (UTF-8). Помоћу ње се знак записује у једном, два или три бајта, у зависности од тога о ком је знаку реч. Ова трансформациона шема је превасходно згодна за употребу у језицима који користе латиницу.

Постоји и новији Уникод стандард под називом UCS-4 који користи 4 бајта за запис 231 = 2147483648 знакова подељених у тзв. равни. Прва два бајта дефинишу раван, тако да има 215 = 32768 равни. Друга два бајта дефинишу знак унутар равни, тако да има 216 = 65536 знакова по равни. Тај новији формат је више направљен као план за будућност него као реална опција, пошто још увек ниједном знаку није додељен код из новодобијеног простора, односно сви за сада дефинисани знакови (цео UCS-2) се налазе у равни 0 или основној вишејезичној равни (Basic Multilingual Plane, BMP). Да би се UCS-4 транспарентно увео у употребу редефинисани су формати записа UTF-7, UTF-8, UTF-16 и UTF-32. Сви ови називи су повезани са бројем битова по знаку. UTF-7 је, у суштини, UTF-8, али је развијен за кодовање при преносу порука електронске поште: користи нижих 7 битова, а бит највеће тежине представља бит парности, који се користи за проверу исправности при преносу. UTF-16 је у неку руку синоним за UCS-2 и садржи више од два бајта само у случају да се кодира неки знак изван „Основне језичке равни“ (BMP). UTF-32 је у ствари начин записа UCS-4 у коме се користе сва четири бајта. Због тога што виши и нижи бајт (или два бајта) могу да се запишу у меморију на два начина, постоје још по две подваријанте UTF-16 и UTF-32 које се разликују по редоследу бајтова. То су UTF-16BE (big endian) и UTF-16LE (little endian) и UTF-32BE и UTF-32LE. Ово није уведено да би се увела додатна забуна и збрка, него зато што различите архитектуре рачунара различито чувају податке (називи big endian и little endian односе се на редослед уписа бајтова у вишебајтну реч, тај редослед је хардверски дефинисан, зависи од архитектуре процесора, и не може се променити):

Little endian је начин записа податка у меморији тако да је на нижој адреси нижи бајт меморијске речи.

Пример: Нека је податак: 0xABCD. Онда се он записује у меморији као: при чему је адреса 100 почетна адреса податка у меморији.

Big endian је начин записа податка у меморији тако да је на нижој адреси виши бајт меморијске речи.

Пример: Нека је податак: 0xABCD. Онда се он записује у меморији као: при чему је адреса 100 почетна адреса податка у меморији

Укратко о UTF-8

UTF-8 је замишљен као формат који највише одговара латиничном тексту. То је веома погодно за коришћење у изворном коду програма или у разноразним [[markup језици]]ма (HTML, XML, \LaTeX, …) јер су стандардне команде тих програмских/markup језика увијек ASCII, а текст који се користи може да буде и ASCII и UTF-8. На тај начин се не омета рад програмског компајлера или парсера markup језика, а омогућава се коришћење вишејезичке подршке.

У UTF-8 се карактер записује у облику једног бајта ако у свом запису садржи само најнижих 7 бита, односно, ако је реч о ASCII знаку. Уколико знак у свом уникод запису садржи само најнижих 11 бита, у UTF-8 се записује у облику два бајта. И на крају, ако знак садржи свих 16 бита, записује се у облику три бајта.

За ћирилични текст је свеједно да ли се користи чисти уникод или UTF-8, пошто се сваки ћирилични знак записује у облику два бајта и у једном и у другом формату. За нас је ипак оптималнији UTF-8 јер постоји могућност писања и ћирилицом и латиницом, па ако у ћирилици већ не може да се избегне употреба два бајта, у латиници се скоро сви знакови записују само једним бајтом (осим š, đ, č, ć и ž). Важно је напоменути да латинично „а“ и ћирилично „а“, иако изгледају исто имају различите кодове и различито се памте у меморији: латинична слова заузимају 1 бајт, а СВА ћирилична два бајта!

Фонтови који подржавају уникод

Да би се користио Уникод у припреми докумената, потребно је имати одговарајуће фонтове који га (барем делимично) подржавају. Од фонтова доступних на Windows-у, уникод сигурно подржавају Arial, Times New Roman, Helvetica, Verdana i Courier New фонтови, а такође су инсталирани на свим Windows платформама, тако да би генерално требало да се користи неки од тих фонтова. Фонтови типа TimesCirilica или YULTimes могу да прикажу наше знакове, али су далеко од уникода и у преносу фајла са једног на други рачунар у електронском облику постоји велика шанса да тај фајл неће бити лепо читљив на другом рачунару, тако да би требало да се такви нестандардни фонтови избегавају колико год је то могуће.

Уникод, базе података и XML

Светски трендови развоја база података иду ка увођењу уникода, као стандардни начин записа података и XML-а, као стандарни језик за пренос и представљање тих података.

Већина база података већ дуже време подржава уникод. Добар део апликација за рад са базама користе XML за представљање и пренос података, зато што се показало да је XML једноставан језик за програмирање и зато што се показало да је XML довољно флексибилан да може да пренесе било какав тип података на сличан начин. Да би се програми међусобно „разумели“, развијени су разни стандарди за опис података користећи XML (као што је, на пример, Encoded Archival Description standard).

То увођење XML-а као главног језика за подршку базама података је још више учврстило позицију уникода, пошто се XML фајлови стандардно пишу у UTF-8 или UTF-16. Занимљива је и та чињеница да је Мајкрософт, који се углавном противи свим стандардима и труди се да дефинише своје, прихватио XML и користи га где год може. Цела .NET технологија је заснована на XML-у. Због тога може да се очекује да ће у будућности бити само више XML-а и више уникода и да је битно што раније се оријентисати ка њима.

На страници http://www.unicode.org/charts/ могу се пронаћи комплетни уникод кодови за све светске језике.

Уместо закључка:

Цела прича са кодним странама почела је још 90-их година XX века, када је Интернет комуникација била тек у зачетку. Временом су многи од ових проблема решени, већина оперативних система има системски уграђену подршку за уникод, као и већина апликација (нарочито се то односи на претраживаче Интернета, канцеларијске пакете и програме за електронску пошту). Уколико се појаве проблеми са приказивањем докумената на Интернету разлог може бити

  • није подешено кодовање стране на српски језик, ћирилично писмо или UTF-8 стандард (евентуално испробати остале кодне стране за ћирилицу)
  • нису кориштени уникод фонтови
Advertisements

One thought on “Представљање ненумеричких података

Оставите одговор

Попуните детаље испод или притисните на иконицу да бисте се пријавили:

WordPress.com лого

Коментаришет користећи свој WordPress.com налог. Одјавите се / Промени )

Слика на Твитеру

Коментаришет користећи свој Twitter налог. Одјавите се / Промени )

Фејсбукова фотографија

Коментаришет користећи свој Facebook налог. Одјавите се / Промени )

Google+ photo

Коментаришет користећи свој Google+ налог. Одјавите се / Промени )

Повезивање са %s