Unicode
Obsah boxu
Unicode je mezinárodní technický standard pro konzistentní kódování, reprezentaci a zpracování textu ve většině světových písemných systémů. Udržuje jej nezisková organizace Unicode Consortium a jeho hlavním cílem je sjednotit všechny existující znakové sady do jediné, univerzální sady, která by eliminovala problémy s nekompatibilitou a umožnila bezproblémovou výměnu textových dat po celém světě.
Standard přiřazuje každému znaku, symbolu nebo emoji unikátní číselný kód, nazývaný kódový bod (code point). Tento přístup umožňuje počítačům zpracovávat a zobrazovat text v různých jazycích, od angličtiny a češtiny přes arabštinu a čínštinu až po historická písma jako klínové písmo. Unicode je základním kamenem moderního softwaru a internetu, včetně webových stránek, e-mailu a operačních systémů.
📜 Historie a vývoj
Před vznikem Unicode existovalo velké množství různých znakových sad, které si často konkurovaly. Každá sada byla navržena pro specifický jazyk nebo skupinu jazyků. Například standard ASCII pokrýval pouze znaky anglické abecedy, číslice a základní symboly. Pro jazyky se speciálními diakritickými znaménky, jako je čeština, vznikly různé standardy (např. ISO 8859-2, Windows-1250), které si však navzájem odporovaly. Text vytvořený v jednom kódování se v jiném zobrazil jako nesmyslná změť znaků, což je jev známý jako Mojibake.
🏛️ Vznik a cíle
Práce na univerzálním standardu začaly koncem 80. let 20. století. Klíčovými postavami byli Joe Becker z firmy Xerox a Lee Collins a Mark Davis z firmy Apple. Jejich cílem bylo vytvořit 16bitovou znakovou sadu s pevně danou šířkou, která by dokázala pokrýt všechny moderní jazyky světa. V roce 1991 bylo založeno Unicode Consortium, které sdružuje přední technologické firmy jako Apple, Google, IBM, Microsoft a další.
První verze standardu, Unicode 1.0, byla vydána v říjnu 1991. Postupně se standard rozšiřoval o další písma, symboly a také o mechanismy pro zpracování složitějších písemných systémů (např. ligatury v arabštině nebo směr psaní zprava doleva).
🚀 Klíčové milníky
- Unicode 1.0 (1991): Obsahoval 7 161 znaků a pokrýval 24 písemných systémů.
- Unicode 2.0 (1996): Zavedl mechanismus "surrogate pairs" (náhradních párů), který rozšířil kódový prostor za původních 65 536 znaků a umožnil kódovat více než milion znaků. Tím se Unicode stal skutečně univerzálním.
- Unicode 3.1 (2001): Přidal podporu pro historická písma, jako je gotické písmo nebo lineární písmo B.
- Unicode 5.2 (2009): Přidána podpora pro měnový symbol indické rupie (₹).
- Unicode 6.0 (2010): Oficiálně zahrnul první sadu emoji, což vedlo k jejich masivnímu rozšíření v digitální komunikaci.
- Unicode 15.1 (2023): Poslední stabilní verze (k roku 2025), která obsahuje přes 149 000 znaků.
⚙️ Základní principy a architektura
Unicode je postaven na několika klíčových konceptech, které zajišťují jeho flexibilitu a univerzálnost.
🔤 Kódový prostor a roviny
Celý rozsah Unicode je definován jako kódový prostor (codespace), který obsahuje 1 114 112 možných pozic, tzv. kódových bodů (code points). Tyto body se zapisují v šestnáctkové soustavě s prefixem "U+", například `U+0041` pro písmeno 'A'.
Kódový prostor je rozdělen do 17 rovin (planes), každá o velikosti 65 536 (2¹⁶) kódových bodů:
- Rovina 0: Základní vícejazyčná rovina (Basic Multilingual Plane, BMP) (U+0000 až U+FFFF): Obsahuje téměř všechny znaky moderních jazyků, včetně latinky, cyrilice, řečtiny, arabštiny, hebrejštiny, čínských, japonských a korejských znaků a mnoha symbolů.
- Rovina 1: Doplňková vícejazyčná rovina (Supplementary Multilingual Plane, SMP) (U+10000 až U+1FFFF): Obsahuje historická písma (např. egyptské hieroglyfy), hudební symboly a většinu emoji.
- Rovina 2: Doplňková ideografická rovina (Supplementary Ideographic Plane, SIP) (U+20000 až U+2FFFF): Obsahuje vzácné a historické čínské znaky.
- Ostatní roviny: Jsou vyhrazeny pro další účely, včetně speciálních formátovacích znaků nebo soukromého použití (Private Use Areas).
📝 Formáty kódování (UTF)
Samotný kódový bod (např. U+263A pro ☺) neurčuje, jak bude znak uložen v paměti počítače nebo přenášen po síti. K tomu slouží formáty kódování (Unicode Transformation Format, UTF).
- UTF-8: Nejpoužívanější formát na internetu (přes 98 % webových stránek). Je to kódování s proměnlivou délkou:
Jeho hlavní výhodou je efektivita pro texty s převahou latinky a robustnost.
- UTF-16: Kódování s proměnlivou délkou, které používá 2 nebo 4 bajty.
- Znaky z BMP kóduje dvěma bajty.
- Znaky z doplňkových rovin kóduje pomocí čtyř bajtů (tzv. surrogate pair).
Historicky byl dominantní v operačních systémech Microsoft Windows a v programovacích jazycích jako Java a JavaScript.
- UTF-32: Kódování s pevnou délkou. Každý znak bez výjimky kóduje čtyřmi bajty.
- Výhodou je jednoduchost – každý znak má stejnou velikost, což zjednodušuje indexaci v textu.
- Nevýhodou je neefektivita, protože i pro nejběžnější znaky spotřebovává čtyřikrát více místa než ASCII. Používá se zřídka, především v interních aplikacích, kde je rychlost přístupu ke znakům důležitější než paměťová náročnost.
🏷️ Vlastnosti znaků a algoritmy
Unicode není jen tabulka znaků. Definuje také rozsáhlou databázi vlastností pro každý znak (Unicode Character Database, UCD). Tyto vlastnosti určují například:
- Zda je znak písmeno, číslo nebo symbol.
- Zda je velké (uppercase) nebo malé (lowercase).
- Jeho číselnou hodnotu (pokud je to číslice).
- Směr psaní (zleva doprava, zprava doleva).
- Jak se má znak chovat při řazení (collation).
Standard také definuje klíčové algoritmy, jako je Unicode Collation Algorithm pro správné abecední řazení textů v různých jazycích (např. aby 'č' bylo v češtině řazeno za 'c') nebo pravidla pro normalizaci textu, která řeší případy, kdy lze jeden vizuální znak zapsat více způsoby (např. 'č' jako jeden znak U+010D nebo jako kombinace 'c' U+0063 a háčku U+030C).
🌍 Význam a použití
Unicode se stal de facto standardem pro textová data v moderním světě. Jeho dopad je patrný v mnoha oblastech:
- Internet a web: Umožňuje existenci vícejazyčných webových stránek, doménových jmen s diakritikou (IDN) a bezproblémovou komunikaci napříč jazykovými bariérami.
- Operační systémy: Moderní systémy jako Microsoft Windows, macOS, Linux, Android a iOS používají Unicode jako své nativní kódování textu.
- Programovací jazyky: Jazyky jako Python, Java, C#, Rust a Swift mají plnou podporu pro Unicode, což umožňuje vývojářům vytvářet globální aplikace.
- Emoji: Unicode Consortium je zodpovědné za standardizaci a přidávání nových emoji, které se staly nedílnou součástí digitální kultury a komunikace.
🤔 Kritika a kontroverze
Přestože je Unicode všeobecně přijímaný, čelí i určité kritice:
- Sjednocení Han (Han Unification): Jedním z nejkontroverznějších rozhodnutí bylo přiřadit stejný kódový bod znakům v čínštině, japonštině a korejštině, které mají společný historický původ, ale v moderních jazycích mohou mít mírně odlišný vzhled nebo sémantický význam. To je stále předmětem debat mezi lingvisty a uživateli z východní Asie.
- Složitost: Standard je extrémně rozsáhlý a komplexní. Plná a správná implementace všech jeho pravidel (např. pro obousměrný text nebo řazení) je pro vývojáře náročná.
- Zahrnování okrajových znaků: Někteří kritici poukazují na to, že standard zahrnuje velké množství historických, fiktivních (např. klingonské písmo) nebo zřídka používaných znaků, což zvyšuje jeho složitost. Debaty se vedou také o neustálém přidávání nových emoji.
🤓 Pro laiky: Unicode v kostce
Představte si, že každý jazyk na světě má svou vlastní malou klávesnici s 256 klávesami. Když napíšete dopis v češtině a pošlete ho kamarádovi do Francie, jeho počítač se podívá na čísla kláves, které jste stiskli, ale použije svou francouzskou "klávesnici". Místo "háčků a čárek" tak uvidí úplné nesmysly. Tomuto zmatku se říká Mojibake.
Unicode tento problém řeší vytvořením jedné obrovské, univerzální "klávesnice" pro celý svět.
- Každý znak má své číslo: Každé písmeno, symbol nebo smajlík (emoji) na světě dostal své unikátní číslo (kódový bod). Písmeno "A" má číslo 65, písmeno "č" má číslo 269 a smajlík 😂 má číslo 128 514.
- Počítač si čísla ukládá: Když píšete text, počítač si neukládá obrázky písmen, ale právě tato čísla.
- Chytré kódování (UTF-8): Aby soubory nebyly zbytečně velké, používá se nejčastěji kódování UTF-8. To funguje jako chytrý systém balení:
- Běžné znaky anglické abecedy (A, B, C...) zaberou jen jeden "balíček" (bajt).
- Znaky s diakritikou (č, ř, š...) zaberou dva "balíčky".
- Vzácnější znaky a emoji zaberou tři nebo čtyři "balíčky".
Díky Unicode si můžete být jisti, že text, který napíšete na svém počítači v Česku, se zobrazí správně na telefonu v Japonsku nebo na tabletu v Brazílii. Je to univerzální jazyk, kterému rozumí všechny moderní počítače.