Unicode

Unicode je medzinárodný štandard, ktorého cieľom je definovať kódovaciu schému schopnú reprezentovať väčšinu znakov používaných v písaných jazykoch spolu s inými symbolmi.
Napriek technickým problémom, obmedzeniam a kritike sa zo štandardu Unicode stala dominantná kódovacia schéma používaná pri internacionalizácii softvéru a viacjazyčných prostredí.
Operačné systémy Microsoft Windows NT a odvodené verzie Windows 2000 a Windows XP používajú Unicode, presnejšie UTF-16, na internú reprezentáciu textu.
Operačné systémy UNIXového typu ako GNU/Linux, BSD a Mac OS X prijali Unicode, presnejšie UTF-8, ako základ pre reprezentáciu viacjazyčného textu.
Unicode je štandard pre univerzálne kódovanie znakov pre počítače. Toto kódovanie navrhla nezisková organizácia s názvom The Unicode Consortium, ktorej cieľom bolo vytvoriť jednotnú sadu znakov UCS (Universal Character Set), ktorá by nahradila množstvo rozdielnych sád znakov používaných v jednotlivých krajinách. Tento štandard publikovala v knihe The Unicode Standard. Okrem znakovej sady, ktorá bola tiež normalizovaná ako ISO/IEC 10646, dokument obsahuje i ďalšie veci súvisiace s počítačovým písmom (spôsob dekompozície, vykresľovania, metódy kódovania…). Tento štandard bol implementovaný do moderných operačných systémov a jeho modifikácia UTF (Unicode Transformation Format) je implementovaná v jazykoch XML a Java.
Vývoj štandardu.
Vznik jednotného kódu znakov podmienila existencia množstva znakových sád. Znakové sady sa líšili nielen pre jednotlivé krajiny, ale i v rámci jednej z krajín existovalo viacero znakových sád. Všetky znakové sady boli navrhnuté na základe americkej normy ASCII, ktorá pevne určovala prvých 128 znakov sady a zvyšných 128 sa líšilo v závislosti od krajiny. Na Slovensku sa najčastejšie používali (a ešte stále používajú) kódy ISO 8859-2, známy tiež ako Latin-2 alebo CP 852, ktorý definovala medzinárodná organizácia ISO, ďalej kód ANSI 1250, známy tiež ako Windows 1250, definovaný americkou organizáciou, ale najčastejšie používaný bol kód Kamenických, známy tiež ako CP 895, ktorý nebol štandardizovaný. Podobné to bolo i v iných krajinách. Celý problém bol v tom, že kód ASCII bol navrhnutý tak, že jednému znaku zodpovedal jeden bajt. Takéto kódovanie umožňovalo vytvárať sady s 256 znakmi. Kódovanie Unicode je navrhnuté pomocou dvoj-bajtového a troj-bajtového kódovania znakov, čo umožňuje kódovať oveľa viac znakov. Štandard je navrhnutý tak, že všetky možné znaky rozdeľuje do sedemnástich dvoj-bajtových rovín s poradovými číslami od 0 po 16 (hexadecimálne od 00 po 10). Každá z týchto rovín teda kóduje 216 = 65 536 znakov. Takéto rozdelenie umožňuje definovať až 17 × 216 = 1 114 112 znakov. Poradové čísla znakov sa v Unicode označujú hexadecimálne U+hh"hhhh", kde prvá hodnota "hh" značí rovinu a druhá hodnota "hhhh" značí poradie v príslušnej rovine. Limit 17 rovín bol zvolený kvôli UTF-16 kódovaniu Unicode, keďže to dokáže kódovať iba 220 znakov (16 rovín) + nultú rovinu, zatiaľco UTF-8 aj s obmedzením na 4 bajty dokáže kódovať 221 znakov (až 32 rovín). Roviny sú následne rozdelené do tzv. blokov, logicky usporiadaných celkov (znakových sád), ktoré na rozdiel od rovín nemajú pevnú veľkosť. Prvá verzia štandardu – Unicode 1.0.0 – vznikla v októbri 1991, súčasná verzia štandardu je už Unicode 10.0 z roku 2017. Táto definuje viac ako 136 tisíc znakov, čo je približne iba 12 % zo všetkých možných. Unicode 10.0 obsahuje 280 blokov (rozprestrených cez niektoré roviny) pokrývajúcich až 25% adresného priestoru pre 1 114 112 znakov (bloky tak nemajú priradené a vyčerpané všetky pozície). Najmenšie bloky majú iba 16 znakov (v Unicode 10.0 je takých až 13 blokov) a najväčšie bloky obsahujú 65 536 znakov, sú to celé roviny s poradovými číslami 15 a 16.
Problémy s UNICODE.
Pôvodná koncepcia bola taká, že každému znaku bude priradená dvojbajtová hodnota, ktorá bude znak reprezentovať v pamäti počítača. Takéto kódovanie však vytváralo niekoľko problémov. Niektoré systémy boli navrhnuté tak, že z pamäte sa najskôr spracovával vyšší bajt a potom nižší a u iných systémov to bolo opačne. Na niektorých systémoch preto začali ukladať bajty v opačnom poradí, čo spôsobilo to, že po prenose textu z jedného systému na druhý bol text nečitateľný (pozri Endianita). Problém vyriešili tým, že na začiatok každého dokumentu vložili informáciu BOM (Byte Order Mark) o tom, v akom poradí sú uložené bajty reprezentujúce text. Takéto kódovanie sa dnes označuje skratkou UCS-2.
Ďalším problémom bola nekompatibilita so staršími systémami, ktoré používali kódovanie ASCII. Tento problém čiastočne rieši kódovanie UTF s premenlivou bitovou dĺžkou. Toto kódovanie kóduje prvých 128 znakov zhodne s ASCII tabuľkou. Líšiť sa začína až ďalšími znakmi, ktoré sa kódujú viac ako 8 bitmi.
V súčasnosti sa používajú tieto spôsoby kódovania: