ISO/IEC 10646

ISO/IEC 10646 je mezinárodní norma definující univerzální kódovanou znakovou sadu (), která by měla zahrnovat znaky nutné k reprezentaci prakticky všech známých jazyků. UCS obsahuje znaky z různých standardů znakových sad, včetně množství grafických, typografických, matematických a vědeckých symbolů. Norma ISO/IEC 10646 je vyvíjena v součinnosti s Unicode – přestože oba standardy nemají zcela totožné zaměření, definují stejnou univerzální znakovou sadu se stejnými kódy znaků.

Kódový rozsah 
ISO/IEC 10646 používá 31bitové kódy znaků, od roku 1993 se však předpokládá, že všechny znaky budou spadat do kódového rozsahu UCS, tj. intervalu 0x000000 až 0x10FFFF, který poskytuje prostor pro více než milion znaků. Většina používaných znaků, včetně ostatních kódovacích standardů, je umístěna na prvních 65536 pozicích (0x0000 - 0xFFFF), které se nazývají Basic Multilingual Plane (BMP). Znaky později přidané mimo BMP jsou obvykle pro specifické aplikace, jako např. grafické symboly (včetně smajlíků), historická písma a vědecké symboly. Současná představa je, že se nebudou používat kódy mimo 21bitový prostor, přesněji mimo interval 0x000000 až 0x10FFFF. který poskytuje kódy pro více než milion možných znaků.

Standard ISO/IEC 10646-1 byl poprvé publikován v roce 1993 a definuje architekturu UCS a obsah BMP. Druhá část ISO/IEC 10646-2 byla přidána v roce 2001 a definuje znaky mimo BMP. Nové znaky jsou přidávány průběžně, ale existující znaky nebudou nikdy měněny a jsou stabilní.

Standard také definuje základní metody, jak kódovat řetězce znaků jako posloupnosti bytů. Nejpoužívanějším kódováním je UTF-8, dále je definováno UTF-16, UTF-32, UCS-2 a UCS-4.

Historie 
Mezinárodní organizace pro normalizaci (ISO) začala práci na UCS v roce 1989 a první pracovní verzi dokumentu ISO 10646 publikovala v roce 1990. Jedním z hlavních tvůrců byl Hugh McGregor Ross. Tehdejší verze se od dnešní značně lišila. Definovala kódový rozsah jako
 128 skupin () po
 256 rovinách () po
 256 řádcích () po
 256 buňkách ({{Vjazyce2|en|cells}}).

Při lineárním vyjádření se jedná o použití 31bitového kódu. Přestože tímto způsobem by bylo možné zakódovat až 2 147 483 648 znaků, původní standard nedovoloval používat byty s hodnotami řídicích kódů 0 až 0x1F a 0x80 až 0x9F šestnáctkově v libovolné z uvedených složek (kromě skutečných řídicích znaků), což snižovalo maximální počet znaků na 679 477 248. Například velké písmeno "A" () mělo kód skupina 0x20, rovina 0x20, řádek 0x20, buňka 0x41.

Tento původní standard ISO/IEC 10646 umožňoval kódovat znaky z UCS třemi metodami:
 UCS-4 používající čtyři byty pro každý znak je nejjednodušší, ale nejméně úsporné kódování všech znaků;
 UCS-2 používající dva byty pro každý znak, což umožňuje přímo kódovat znaky z první roviny (původně s číslem 0x20) Basic Multilingual Plane obsahující prvních 36864 kódových bodů; na jiné roviny a skupiny lze přepínat pomocí řídicích posloupností podle ISO/IEC 2022;
 UTF-1 kódující všechny znaky pomocí posloupností bytů proměnné délky (1 až 5 bytů, z nichž žádný neobsahuje řídicí kódy).

V roce 1990 existovaly dvě skupiny zabývající se vývojem univerzální znakové sady: Unicode používající 16 bitů pro každý znak (s 65536 možnými znaky) a ISO/IEC 10646. Softwarové firmy odmítly přijmout složitost a velikostní požadavky ISO standardu a byly schopny přesvědčit několik národních organizací z ISO, aby hlasovaly proti ISO/IEC 10646. Tvůrci ISO/IEC 10646 zjistili, že v této situaci nemohou ve vývoji standardu pokračovat, a proto proběhla jednání o sjednocení ISO standardu s Unicode. Z pohledu ISO/IEC 10646 došlo ke dvěma základním změnám: bylo zrušeno omezení zakazující používat hodnoty řídicích znaků v libovolné složce kódu, takže lze používat kódové body jako 0x0000101F; byla dohodnuta synchronizace znakové sady a kódů znaků z Basic Multilingual Plane mezi ISO/IEC 10646 Unicode.

Během doby se ukázalo, že jsou nutné i změny ve standardu Unicode: ukázalo se, že 65536 znaků ne zcela postačuje a standard od verze 2.0 podporuje používání až 1 112 064 kódových bodů ze 17 rovin pomocí mechanismu UTF-16 náhradních dvojic (). Z tohoto důvodu byl rozsah kódů ISO/IEC 10646 omezen na znaky, které lze vyjádřit pomocí UTF-16, tj. něco přes milion znaků místo více než 679 milionů. Kódování UCS-4 bylo převzato do standardu Unicode s omezením na rozsah podporovaný UTF-16 a se jménem UTF-32, ačkoli se kromě interních dat programů téměř nepoužívá.

Rob Pike a Ken Thompson, tvůrci operačního systému Plan 9 navrhli nové, rychlé a dobře navržené kódování s proměnnou délkou znaku, které bylo nazváno UTF-8,
které v současnosti patří k nejpoužívanějším kódováním pro UCS.

 Struktura UCS 
UCS se skládá ze 17 rovin ():

 Basic Multilingual Plane (BMP, rovina 00)
 Supplementary Multilingual Plane pro písma a symboly (SMP, rovina 01)
 Supplementary Ideographic Plane (SIP, rovina 02)
 Tertiary Ideographic Plane (TIP, rovina 03) je rezervována pro ideografické symboly
 Roviny 04 až 0D jsou rezervovány pro budoucí rozšíření
 Supplementary Special-purpose Plane (SSP, rovina 0E)
 Roviny 0F a 10 jsou rezervovány pro soukromé použití

UCS každému znaku přiřazuje nejen číselný kód, ale i oficiální jméno. Hexadecimální číslo reprezentující UCS nebo Unicode hodnotu je obvykle uvedeno znaky „U+“, jako např. U+0041 je znak velké latinské písmeno A (). UCS znaky U+0000 až U+007F jsou shodné se znaky ASCII tabulky a znaky U+0000 až U+00FF jsou shodné s kódem ISO 8859-1.

 Rozdíly mezi ISO/IEC 10646 a Unicode 
ISO/IEC 10646 a Unicode mají identickou znakovou sadu a kódy znaků. Unicode vydává nové verze a přidává nové znaky častěji. Rozdíl je mimo jiné v tom, že Unicode zahrnuje pravidla a standardy nad rámec ISO/IEC 10646. ISO/IEC 10646 definuje jednoduché kódování znaků, čímž rozšiřuje předchozí standardy jako ISO/IEC 8859. Unicode navíc stanovuje pravidla pro abecední řazení, normalizační formy a obousměrný algoritmus pro písma psaná zprava doleva jako je arabština a hebrejština. Pro dosažení interoperability mezi platformami nestačí podporovat ISO/IEC 10646, ale je nutné (zvláště při použití psaní oběma směry) implementovat Unicode.

Pro podporu těchto pravidel a algoritmů Unicode přidává mnoho vlastností ke každému znaku v sadě, jako například vlastnosti určující implicitní směr psaní znaku a vlastnosti pro určení, jak se znak kombinuje s jinými znaky. Pokud znak reprezentuje numerickou hodnotu jako například arabská číslice „8“ nebo zlomek „¼“, i jeho numerická hodnota je jeho vlastností. Záměrem Unicode je, aby tyto vlastnosti umožňovaly interoperabilní zpracovávání textu používajícího kombinaci několika jazyků.

Některé aplikace podporují ISO/IEC 10646, ale neobsahují podporu Unicode. Příkladem takové aplikace je program Xterm, který může správně zobrazovat všechny ISO/IEC 10646 znaky, u kterých existuje jeden znak odpovídá jednomu glyfu a používají jen jeden směr psaní textu. Může zpracovávat také některé z kombinačních znaků pomocí jednoduchého přepsání, ale nemůže zobrazovat hebrejštinu (obousměrné písmo), Dévanágarí (jeden znak má více tvarů-glyfů) nebo arabštinu (obě uvedené vlastnosti). Většina grafických aplikací používá pro výpis textu standardní funkce operačního systému, takže mohou umožňovat základní zpracování takových písem, i když některé detaily, které musí řešit aplikace samotné, dosud správně nefungují.

UCS definuje tzv. kombinované znaky. Jsou to symboly které mají význam v kombinaci s jiným znakem a tvoří společně určitý symbol. Příkladem mohou být i česká diakritická znaménka. Část kombinovaných znaků má svůj samostatný kód, který vznikl historicky při kódování národních abeced. Pro účely matematických a dalších symbolů je možné vytvářet další kombinace, přidávat akcenty a diakritiku nad libovolný znak (např. šipku nad matematickou proměnnou).

Všechny informační systémy nepotřebují nutně všechny vlastnosti UCS. Jsou proto definovány následující implementační úrovně ():
 Level 1: Kombinované znaky a znaky „Hangul Jamo“ (moderní korejská varianta abecedy) nejsou podporovány.
 Level 2: Jsou podporovány pevně definované kombinované znaky.
 Level 3: Jsou podporovány všechny znaky UCS, libovolné varianty kombinovaných znaků.

 Vztahy mezi verzemi ISO/IEC 10646 a Unicode 
 ISO/IEC 10646-1:1993 = Unicode 1.1
 ISO/IEC 10646-1:1993 plus Amendments 5 to 7 = Unicode 2.0
 ISO/IEC 10646-1:1993 plus Amendments 5 to 7 = Unicode 2.1 kromě znaku Eura a Object Replacement Character, které jsou obsaženy v Amendment 18
 ISO/IEC 10646-1:2000 = Unicode 3.0
 ISO/IEC 10646-1:2000 and ISO/IEC 10646-2:2001 = Unicode 3.1
 ISO/IEC 10646-1:2000 plus Amendment 1 and ISO/IEC 10646-2:2001 = Unicode 3.2
 ISO/IEC 10646:2003 = Unicode 4.0
 ISO/IEC 10646:2003 plus Amendment 1 = Unicode 4.1
 ISO/IEC 10646:2003 plus Amendments 1 to 2 = Unicode 5.0 kromě Dévanágarí znaků GGA, JJA, DDDA and BBA, které jsou obsaženy v Amendment 3
 ISO/IEC 10646:2003 plus Amendments 1 to 4 = Unicode 5.1
 ISO/IEC 10646:2003 plus Amendments 1 to 6 = Unicode 5.2
 ISO/IEC 10646:2003 plus Amendments 1 to 8 = ISO/IEC 10646:2011 = Unicode 6.0 kromě znaku indické rupie
 ISO/IEC 10646:2012 = Unicode 6.1
 ISO/IEC 10646:2012 = Unicode 6.2 kromě znaku turecké liry, který je obsažen in Amendment 1
 ISO/IEC 10646:2012 = Unicode 6.3 kromě znaku turecké liry, který je obsažen v Amendment 1, a pěti řídicích znaků pro texty psané oběma směry (Arabic Letter Mark, Left-To-Right Isolate, Right-To-Left Isolate, First Strong Isolate, Pop Directional Isolate), které jsou obsaženy v Amendment 2
 ISO/IEC 10646:2012 plus Amendments 1 and 2 = Unicode 7.0 kromě symbolu Rublu
 ISO/IEC 10646:2014 plus Amendment 1 = Unicode 8.0
 ISO/IEC 10646:2014 plus Amendments 1 and 2 = Unicode 9.0 přidává 7500 nových znaků, čímž počet definovaných znaků dosáhl čísla 128172. Bylo přidáno 72 nových symbolů emoji, písma Adlam, Bhaiksuki, Marchen, Newa, Osage a Tangut, 19 symbolů pro 4K televize, a 74 symbolů emoji

 Odkazy 

 Poznámky 

 Reference 

 Související články 
 Unicode
 UTF-8
 UTF-16
 UTF-32
 Příbuzné ISO standardy:
 ISO/IEC 646 (pozice 0 až 127 jsou v ISO/IEC 10646 stejné jako v Unicode a čísla 646 a 10646 jsou podobná)
 ISO/IEC 2022 Informační technologie Struktura znakového kódu a techniky jeho rozšiřování ISO/IEC 6429 Řídicí kódy C0 a C1 ISO/IEC 8859 (pozice 0 až 255 UCS a Unicode se shodují s ISO-8859-1 neboli ISO Latin 1)
 ISO 14651 Informační technologie – Mezinárodní řazení a porovnání řetězců ISO 15924 Kódy pro reprezentaci jmen písem'' (každý znak je spojený s jedním z těchto písem)
 HTML entita
 Seznam Unicode fontů

Externí odkazy 
 Stránka s volně dostupnými standardy ISO/IEC, odkud lze získat aktuální verzi standardu ISO/IEC 10646:2014 (ZIP soubor 129 MB, vydán 2014-09-01) a elektronické vsuvky (ZIP soubor 1,7 MB).
 ISO/IEC JTC1/SC2/WG2, pracovní skupina pro ISO/IEC 10646
 UTF-8 a Unicode FAQ
 Freewarové fonty, editory a dokumentace organizace SIL
 Jednoduchý ale příjemný příklad UTF-8 testující funkcionalitu vašeho WWW prohlížeče a fonty.

10646
Unicode