Predstavljanje teksta
Kada je tekst u pitanju, kodiranje je relativno jednostavno – svakom simbolu, bez obzira da li je u pitanju slovo, cifra, kontrolni znak, znak interpunkcije ili bilo koji drugi znak koji se može pojaviti u tekstu, dodeljuje se odgovarajući broj.
Pored IBM standarda EBCDIC, najznačajniji standard za kodiranje teksta tokom dugog niza godina bio je ASCII (American Standard Code for Information Interchange). Standardni ASCII set sastoji se iz 128 simbola i specijalnih znakova označenih brojevima od 0 do 127. Ovo znači da se svaki znak može predstaviti nizom od 7 bitova.
Tako je u ASCII standardu definisano da se veliko slovo A zamenjuje brojem 65, razmak brojem 32, tačka brojem 33, prelazak u novi red brojem 13 (carriage return) ili kombinacijom 13 i 10 (carriage return i line feed) itd.
Pošto bi bilo praktično iskoristiti ceo bajt za beleženje simbola (svih 8 bitova), kreiran je i prošireni ASCII standard u kome je dodato još 128 znakova (posebna slova iz francuskog i nemačkog jezika, matematički i grafički simboli) i tako je nastala ASCII tabela sa 256 znakova. Svaki znak je bio zabeležen u tačno jednom bajtu. Na ovaj način bi ceo roman "Hari Poter i relikvije smrti" (kao čist tekst) zauzeo oko 1,1 MiB memorije.
Problem koji se vrlo brzo pojavio bio je nedostatak znakova iz pisama drugih svetskih jezika. Primer za to su svakako ruski i grčki jezik, a na našim prostorima je bio očigledan nedostatak srpskih latiničnih slova i ćirilice.
Prvi pokušaj rešavanja ovog problema bio je kroz kreiranje tzv. YUSCII fontova. Drugim rečima, kreirani su fontovi u kojima su pojedini znakovi osnovnog ASCII standarda zamenjivani nedostajućim slovima (npr. simbol "@" zamenjen je slovom "Ž"). Problem je bio u tome što su u tekstu ovi znaci i dalje ostajali to što jesu, bio je promenjen samo njihov izgled u različita slova. Bitno je znati da su ovi fontovi i dalje prisutni – postoji veliki broj različitih vrsta. Generalni savet je da se nikako ne koriste prilikom rada sa tekstom, već, ako je neophodno, samo u grafičkom dizajnu, unutar slike.
ASCII | YUSCII | ASCII | YUSCII |
---|---|---|---|
@ | Ž | ` | ž |
[ | Š | { | š |
\ | Đ | | | đ |
] | Ć | } | ć |
^ | Č | ~ | č |
Q | Љ | q | љ |
W | Њ | w | њ |
X | Џ | x | џ |
Uporedni prikaz YUSCII znakova i ASCII karaktera čije pozicije zauzimaju
Rešenje koje se održavalo godinama i koje je bilo podržano od strane operativnog sistema bile su kodne strane. Princip se svodio na to da se znakovi iz proširenog dela ASCII standarda (znači posle 127-og znaka) zamenjuju simbolima nacionalnih pisama.
Za nas su od značaja kodne strane CP852 (latinica) i CP855 (ćirilica) pod MS-DOS operativnim sistemom, odnosno CP1250 (latinica) i CP1251 (ćirilica) pod Windows-om (CP – code page).
Pošto različiti znakovi, unutar različitih kodnih strana, imaju iste kodove (menjaju se u iste brojeve), dolazi do konfuzije u smislu koje znakove treba prikazati. Zbog toga se u nekim programima prilikom podešavanja fonta za prikaz teksta obično mora navesti i koja kodna strana se koristi (Western, Central European, Russian, Cyrilic...).
Danas su kodne strane i ASCII standard zastareli i zamenjeni novim UNICODE standardom. Ideja UNICODE-a je da se u okviru jednog standarda objedine svi znakovi nacionalnih pisama, za šta su 256 mogućih znakova ASCII standarda jednostavno suviše tesni. Tako UNICODE za zapis jednog znaka koristi dva bajta (16 bitova, što daje ukupno 216 = 65536 mogućih znakova) ili u proširenoj verziji i do 4 bajta (preciznije, unutar UNICODE verzije 5.1 standarda, rezervisano je od 00000000 do 0010FFFF, odnosno 1.114.112 pozicija za znakove a upotrebljeno je više od 100.000). Ovoliki broj znakova obuhvata svetske jezike, matematičke simbole, muzičku notaciju, drevna pisma i sl. Ipak, za sada je na računarima najviše u upotrebi 2-bajtna, odnosno osnovna multijezička verzija (BMP – Basic Multilingual Plane).[1]
Pored svih prednosti, standard ima i jednu očiglednu manu – sada je za zapis istog teksta potrebno više memorije nego ranije (2 ili 4 bajta za svaki znak, umesto dosadašnjeg jednog bajta). Osim toga, stariji programi i operativni sistemi mogu imati problema sa UNICODE kodiranim tekstom. Zbog toga su osmišljene različite varijante za "pakovanje" UNICODE-a, od kojih je verovatno najkorišćeniji standard za kodiranje UTF-8. Ovaj standard se zasniva na ideji da je najveći deo teksta pisan običnom engleskom latinicom, pa se ti znakovi i dalje beleže u po jednom bajtu. Zato postoje grupe kodova koje definišu kada se koriste 2, 3 ili više bajtova za zapis ostalih znakova.[2]
U sledećoj tabeli možemo videti primer kodiranja teksta "Mačka u džaku" prema nekoliko standarda (brojevi su dati u heksadecimalnom obliku).
ASC | M | a | c | k | a | u | d | z | a | k | u | ||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
ASCII | 4D | 61 | 63 | 6B | 61 | 20 | 75 | 20 | 64 | 7A | 61 | 6B | 75 |
LAT | M | a | č | k | a | u | d | ž | a | k | u | ||
CP-1250 | 4D | 61 | E8 | 6B | 61 | 20 | 75 | 20 | 64 | 9E | 61 | 6B | 75 |
UNICODE | 004D | 0061 | 010D | 006B | 0061 | 0020 | 0075 | 0020 | 0064 | 017E | 0061 | 006B | 0075 |
UTF-8 | 4D | 61 | C48D | 6B | 61 | 20 | 75 | 20 | 64 | C5BE | 61 | 6B | 75 |
CYR | М | а | ч | к | а | у | џ | а | к | у | |||
UNICODE | 041C | 0430 | 0447 | 043A | 0430 | 0020 | 0443 | 0020 | 045F | 0430 | 043A | 0443 | |
UTF-8 | D09C | D0B0 | D187 | D0BA | D0B0 | 20 | D183 | 20 | D19F | D0B0 | D0BA | D183 |
- The Unicode Consortium, Unicode 5.1.0
- Kuhn, M., UTF-8 and Unicode FAQ for Unix/Linux