Unicode: Porovnání verzí

Z Wikipedie, otevřené encyklopedie
Smazaný obsah Přidaný obsah
Pteryx (diskuse | příspěvky)
doplnění odkazu na GB18030, smazání přebytečných "informací" v odstavci o kódování
Řádek 7: Řádek 7:
Úspěch Unicode v unifikaci znakových sad vedl k jeho rozšíření a převládajícímu používání pro [[Internacionalizace a lokalizace|internacionalizaci a lokalizaci]] [[Software|počítačového softwaru]]. Unicode je implementován mnoha technologiemi, včetně moderních [[operační systém|operačních systémů]], [[XML]], [[Java (programovací jazyk)|programovacím jazykem Java]] a [[.NET]] Frameworkem firmy [[Microsoft]].
Úspěch Unicode v unifikaci znakových sad vedl k jeho rozšíření a převládajícímu používání pro [[Internacionalizace a lokalizace|internacionalizaci a lokalizaci]] [[Software|počítačového softwaru]]. Unicode je implementován mnoha technologiemi, včetně moderních [[operační systém|operačních systémů]], [[XML]], [[Java (programovací jazyk)|programovacím jazykem Java]] a [[.NET]] Frameworkem firmy [[Microsoft]].


Unicode definuje několik způsobů reprezentace textů různými [[znakový kód|znakovými kódy]]. K nejpoužívanějším kódováním patří [[UTF-8]], [[UTF-16]] a zastaralé [[UCS-2]]. UTF-8 používá jeden [[bajt]] pro libovolný [[ASCII]] znak, přičemž všechny ASCII znaky mají v UTF-8 stejné kódové hodnoty jako ASCII a dva až čtyři bajty pro jiné znaky. UCS-2 používá 16bitové kódové jednotky (dva [[oktet (informatika)|8bitové bajty]]) pro každý znak, ale neumožňuje kódovat všechny znaky v aktuálním standardu Unicode. UTF-16 je rozšíření UCS-2, které pomocí dvou 16bitových jednotek (4 × 8 bit) umožňuje kódovat všechny znaky z Unicode.
Unicode definuje několik způsobů reprezentace textů různými [[znakový kód|znakovými kódy]]. K nejpoužívanějším kódováním patří [[UTF-8]], [[UTF-16]] a zastaralé [[UCS-2]]. UTF-8 používá jeden [[bajt]] pro libovolný [[ASCII]] znak, přičemž všechny ASCII znaky mají v UTF-8 stejné kódové hodnoty jako ASCII a dva až čtyři bajty pro jiné znaky. UCS-2 používá 16bitové kódové jednotky (dva [[oktet (informatika)|8bitové bajty]]) pro každý znak, ale neumožňuje kódovat všechny znaky v aktuálním standardu Unicode. UTF-16 je rozšíření UCS-2, které pomocí dvou 16bitových jednotek (4 × 8 bit) umožňuje kódovat všechny znaky z Unicode. V Číně se používá kódování [[GB 18030|GB18030]], které přebírá celý znakový repertoár Unicode, proto je také jedním ze způsobů kódování Unicode. Mapování GB18030 na UTF-32 je však netriviální (potřebuje převodní tabulku).

Nevýhodou unicode může být složitější zpracování, nebo že stejný text zabírá více prostoru na disku nebo v operační paměti počítače. Ovšem výhody univerzální znakové sady drtivě převažují, což je vidět mj. na tom, že starší osmibitové znakové sady jsou dnes definované jako podmnožiny Unicode.


== Historie ==
== Historie ==
Řádek 74: Řádek 76:


== Původní cíle standardu Unicode ==
== Původní cíle standardu Unicode ==
* '''Jednotnost''' - konstantní šířka znaků dovoluje efektivní hledání, třídění, editace a zobrazení prvků.

* '''Univerzálnost''' - kapacita znakové sady musí být dostatečně velká k zahrnutí všech znaků, které by mohly být využity při výměně textů – především ty, které už byly definovány v hlavních mezinárodních, národních a průmyslových znakových sadách.
;Jednotnost: Konstantní šířka znaků dovoluje efektivní hledání, třídění, editace a zobrazení prvků.
* '''Jednoznačnost''' - jakákoli 16bitová (dnes 32bitová) hodnota zastupuje v jakémkoliv kontextu stejný znak.

* '''Maximální využití''' - text poskládaný z posloupnosti znaků o konstantní šířce může být snadno zpracován; software si nemusí uchovávat stav, dávat si pozor na speciální escape sekvence nebo prohledávat text dopředu či zpět kvůli určení totožnosti znaků.
;Univerzálnost: Kapacita znakové sady musí být dostatečně velká k zahrnutí všech znaků, které by mohly být využity při výměně textů – především ty, které už byly definovány v hlavních mezinárodních, národních a průmyslových znakových sadách.

;Jednoznačnost: Jakákoli 16bitová hodnota, která zastupuje v jakémkoliv kontextu stejný znak.

;Maximální využití: Text poskládaný z posloupnosti znaků o konstantní šířce může být velmi lehce zpracován; software nemusí zachovávat stav, dávat si pozor na speciální escape sekvence nebo prohledávat text dopředu či zpět kvůli určení totožnosti znaků.


Standard Unicode se oproti ISO 10646 navíc zabývá implementací algoritmů pro písma psaná zprava doleva (např. [[arabština]]), podporou oboustranných textů (jako např. směs hebrejštiny a latinky), algoritmy pro [[abecední řazení|řazení]] a porovnávání textů.
Standard Unicode se oproti ISO 10646 navíc zabývá implementací algoritmů pro písma psaná zprava doleva (např. [[arabština]]), podporou oboustranných textů (jako např. směs hebrejštiny a latinky), algoritmy pro [[abecední řazení|řazení]] a porovnávání textů.


V současné chvíli existuje Unicode ve verzi 5.2, která vyšla v roce 2009.<ref>[http://www.unicode.org/standard/standard.html About the Unicode Standard]</ref> Celkem obsahuje více než 245 000 znaků a symbolů z 90 různých jazyků a abeced.<ref>[http://www.unicode.org/charts/ Unicode Scripts]</ref> Unicode Consortium již v této chvíli zaručuje, že všechny nové verze budou zpětně kompatibilní s předchozími, tj. že nové standardy budou přidávat další znaky, ale žádné již nebudou odstraňovat ani měnit.
V současnosti existuje Unicode ve verzi 5.2, která vyšla v roce 2009.<ref>[http://www.unicode.org/standard/standard.html About the Unicode Standard]</ref> Celkem obsahuje více než 245 000 znaků a symbolů z 90 různých jazyků a abeced.<ref>[http://www.unicode.org/charts/ Unicode Scripts]</ref> Unicode Consortium již v této chvíli zaručuje, že všechny nové verze budou zpětně kompatibilní s předchozími, tj. že nové standardy budou přidávat další znaky, ale žádné již nebudou odstraňovat ani měnit.


Unicode není používán pro kódování různých nesmyslných a zřídkakdy používaných znaků nebo znaků pro osobní potřebu, ani grafiky. Umělé znaky, použité pouze pro přechodné vkládání textu, jsou vynechány. Obrázky bez souvislosti k textu, jako jsou například taneční či hudební značky, nezasahují do činnosti Unicode. Různosti v zobrazení znaků nejsou znázorňovány. V rámci Unicode kódování je vyhrazeno 6400 znaků pro potřebu programů; využívání těchto kódů programy není nijak omezeno.
Unicode není používán pro kódování různých nesmyslných a zřídkakdy používaných znaků, znaků pro osobní potřebu, nebo grafiky. Rovněž neobsahuje speciální znaky pro přechodné vkládání textu. Unidoce také nezahrnuje znaky které neslouží k zápisu textu, jako jsou například taneční či hudební značky. Rovněž se nezabývá variantami zobrazení znaků (fonty). Ve znakovém repertoáru Unicode kódování je vyhrazeno 6400 znaků pro potřebu programů, jejichž využití není nijak omezeno.


V souvislosti s jazyky jako je [[wachánština]], jejichž ortografie založené na [[latinka|latince]] používají několik znaků [[cyrilice]] či [[řecké písmo|řeckého písma]], byla řešena otázka, zda kvůli nim do Unicode přidat znaky jako ''latinská [[delta (písmeno)|delta]]'', ''latinská [[théta]]'' či ''latinské [[Ы|jery]]'' jako latinské protějšky těchto řeckých a cyrilských písmen.<ref name="Jim Allan, Unicode">Jim Allan, [https://www.mail-archive.com/unicode@unicode.org/msg14260.html mixed-script writing systems], 2002-11-15, cit. 2014-08-27</ref> Jeden z názorů na tuto problematiku je, že požadavek, aby jazyk byl zapisován pouze znaky jednoho písma je umělý a že v minulosti si různé jazyky půjčovaly písmena i z jiných písem, takže na soubor písmen latinky, cyrilice a řeckého písma může být nahlíženo jako na latinsko-cyrilsko-řecké metapísmo a tedy pro zápis těchto jazyků používat písmena v Unicode již obsažené místo vytváření nových.<ref>Kenneth Whistler, [https://www.mail-archive.com/unicode@unicode.org/msg14261.html mixed-script writing systems], 2002-11-15, cit. 2014-08-27</ref> I v případě, kdy by tato písmena byla zavedena, lze očekávat, že by i nadále pro zápis byly používány řecké a cyrilské verze těchto písmen, protože latinské verze by byly obsaženy pouze v malém počtu fontů.<ref name="Jim Allan, Unicode" />
V souvislosti s jazyky jako je [[wachánština]], jejichž ortografie založené na [[latinka|latince]] používají několik znaků [[cyrilice]] či [[řecké písmo|řeckého písma]], byla řešena otázka, zda kvůli nim do Unicode přidat znaky jako ''latinská [[delta (písmeno)|delta]]'', ''latinská [[théta]]'' či ''latinské [[Ы|jery]]'' jako latinské protějšky těchto řeckých a cyrilských písmen.<ref name="Jim Allan, Unicode">Jim Allan, [https://www.mail-archive.com/unicode@unicode.org/msg14260.html mixed-script writing systems], 2002-11-15, cit. 2014-08-27</ref> Jeden z názorů na tuto problematiku je, že požadavek, aby jazyk byl zapisován pouze znaky jednoho písma je umělý a že v minulosti si různé jazyky půjčovaly písmena i z jiných písem, takže na soubor písmen latinky, cyrilice a řeckého písma může být nahlíženo jako na latinsko-cyrilsko-řecké metapísmo a tedy pro zápis těchto jazyků používat písmena v Unicode již obsažené místo vytváření nových.<ref>Kenneth Whistler, [https://www.mail-archive.com/unicode@unicode.org/msg14261.html mixed-script writing systems], 2002-11-15, cit. 2014-08-27</ref> I v případě, kdy by tato písmena byla zavedena, lze očekávat, že by i nadále pro zápis byly používány řecké a cyrilské verze těchto písmen, protože latinské verze by byly obsaženy pouze v malém počtu fontů.<ref name="Jim Allan, Unicode" />
Řádek 118: Řádek 116:
* Interpunkční znaménka
* Interpunkční znaménka
** obecná interpunkce
** obecná interpunkce
** [[CJK]]
* [[CJK]]
* Symboly
* Symboly
** alfanumerické
** alfanumerické
Řádek 133: Řádek 131:


=== Znaky Unicode ===
=== Znaky Unicode ===
Sjednocení světového kódování znaků je skvělá, ale šestnáctibitové kódování s sebou nese a přináší i několik nevýhod a to:


Každý znak má jednoznačný číselný kód a svůj název. Navíc Unicode definuje u každého znaku některé základní vlastnosti, jako např. zda se jedná o písmeno, symbol atd., zda je písmeno [[majuskule|velké]] či [[minuskule|malé]] atp.
;256× větší znaková sada: Znaky na PC se zobrazí fonty, které kvůli Unicode musí obsahovat 256× víc znaků, než pro 8bitové znakové sady. Pokud přihlédneme k tomu, že v dost jazycích se využije jen malá část z celkového množství, tak znaky úplně zbytečně zabírají místo. Tuto věc Microsoft řeší tak, že Unicode fonty neobsahují úplně všechny znaky, ale jen tu část, která je plně využívaná v určitém prostředí.

;Délka textu: Text je po převádění z osmibitového kódování Unicode 2× delší, ale bez přidání nějaké informační hodnoty. Výsledný text zabere víc místa při uložení a také další zpracování je pomalejší.

;Neslučitelnost s osmibitovým prostředím: Unicode text může mít znaky, které v "normálním", osmibitovém textu normálně nejsou a většinou mají speciální význam - jde především o binární nulu, kterou Unicode text může obsahovat jako vyšší bajt dvoubajtového kódu. Nejde tedy použít stávající programový kód pro práci s textem a musí se od začátku přepsat. Nejde lehce zjistit, jestli text je v Unicode nebo ne, nejde proto lehce zároveň používat Unicode a nějaké další osmibitové kódování. Není možné přejít na Unicode jen z části, je nutný celkový přechod, aby aplikace nejen dostaly text v Unicode, ale aby hlavně Unicode text i očekávaly. Okolnost, že to jde v rámci uzavřeného systému, ukazuje firma Sun s Javou, pracující vnitřně v Unicode, a také produkty firmy Microsoft. Subvenci Unicode však nelze zajistit obecně a nelze kalkulovat s tím, že mu druhá strana bude vždy rozumět – uveřejnění v poště nebo na WWW stránkách je tedy velmi problematické. Ale v tomto bodě se však situace pomalu mění k lepšímu.

Každý znak má jednoznačný číselný kód a svůj název. Navíc Unicode definuje u každého znaku některé základní vlastnosti jako např. zda se jedná o písmeno, symbol atd., zda je písmeno [[majuskule|velké]] či [[minuskule|malé]] atp.


Tabulka Unicode poskytuje prostor pro 1&nbsp;114&nbsp;112 znaků s kódy 0<sub>16</sub> až 10FFFF<sub>16</sub>. Tento prostor se dělí na 17 částí, každý o velikosti 2<sup>16</sup>. První část se nazývá ''Basic Multilingual Plane'' (BMP) a obsahuje znaky běžně používaných abeced. Původní 16bitový návrh Unicode počítal jen s BMP, následně se ale ukázalo, že pro pokrytí všech používaných abeced to nestačí.
Tabulka Unicode poskytuje prostor pro 1&nbsp;114&nbsp;112 znaků s kódy 0<sub>16</sub> až 10FFFF<sub>16</sub>. Tento prostor se dělí na 17 částí, každý o velikosti 2<sup>16</sup>. První část se nazývá ''Basic Multilingual Plane'' (BMP) a obsahuje znaky běžně používaných abeced. Původní 16bitový návrh Unicode počítal jen s BMP, následně se ale ukázalo, že pro pokrytí všech používaných abeced to nestačí.


Prvních 128 znaků (tj. sedmibitové kódy) obsahuje znakovou sadu [[ASCII]]. Osmibitové kódy (tj. prvních 256 znaků) obsahuje znakovou sadu [[ISO 8859-1]] (ISO 8859-1 obsahuje ASCII).
Prvních 128 znaků (tj. sedmibitové kódy) obsahuje znakovou sadu [[ASCII]]. Osmibitové kódy (tj. prvních 256 znaků) obsahují znakovou sadu [[ISO 8859-1]] (ISO 8859-1 obsahuje ASCII).


=== Kódování ===
=== Kódování ===
Řádek 156: Řádek 147:


Kódování UTF-32, UTF-16 a UCS-2 mají každá své varianty podle používaného [[endianita|pořadí bajtů]]. Buď je napevno stanoveno pořadí little-endian, resp., big-endian, nebo se toto pořadí určuje podle tzv. ''[[byte order mark]]'' (BOM), speciální značky umístěné na začátku textu.
Kódování UTF-32, UTF-16 a UCS-2 mají každá své varianty podle používaného [[endianita|pořadí bajtů]]. Buď je napevno stanoveno pořadí little-endian, resp., big-endian, nebo se toto pořadí určuje podle tzv. ''[[byte order mark]]'' (BOM), speciální značky umístěné na začátku textu.

Za kódování Unicode můžeme považovat také čínský standard [[GB 18030|GB18030]].


==== UTF-32 ====
==== UTF-32 ====

Verze z 8. 12. 2017, 14:13

Logo Unicode konsorcia

Unicode (anglicky Unicode) je technická norma pro oblast výpočetní techniky definující konzistentní kódování pro reprezentaci a zpracovávání textů použitelné pro většinu písem používaných v současnosti na Zemi. Unicode je vyvíjen v součinnosti s ISO/IEC 10646 a je publikován elektronicky jako The Unicode Standard. Nejnovější verze obsahuje repertoár více než 120 000 znaků pokrývajících 129 moderních a historických písem a mnoho sad symbolů. Standard sestává ze sady tabulek pro vizuální referenci, popisu metod kódování, sady referenčních datových souborů a dalších položek, jako například vlastností znaků, pravidel pro normalizaci textů, dekompozici, řazení, vykreslování a zobrazování obousměrného textu (pro správné zobrazení textu obsahující písma psaná zprava doleva i zleva doprava, jako například arabské a hebrejské písmo).[1] Poslední verze je Unicode 8.0. Normu udržuje Unicode Consortium.

Úspěch Unicode v unifikaci znakových sad vedl k jeho rozšíření a převládajícímu používání pro internacionalizaci a lokalizaci počítačového softwaru. Unicode je implementován mnoha technologiemi, včetně moderních operačních systémů, XML, programovacím jazykem Java a .NET Frameworkem firmy Microsoft.

Unicode definuje několik způsobů reprezentace textů různými znakovými kódy. K nejpoužívanějším kódováním patří UTF-8, UTF-16 a zastaralé UCS-2. UTF-8 používá jeden bajt pro libovolný ASCII znak, přičemž všechny ASCII znaky mají v UTF-8 stejné kódové hodnoty jako ASCII a dva až čtyři bajty pro jiné znaky. UCS-2 používá 16bitové kódové jednotky (dva 8bitové bajty) pro každý znak, ale neumožňuje kódovat všechny znaky v aktuálním standardu Unicode. UTF-16 je rozšíření UCS-2, které pomocí dvou 16bitových jednotek (4 × 8 bit) umožňuje kódovat všechny znaky z Unicode. V Číně se používá kódování GB18030, které přebírá celý znakový repertoár Unicode, proto je také jedním ze způsobů kódování Unicode. Mapování GB18030 na UTF-32 je však netriviální (potřebuje převodní tabulku).

Nevýhodou unicode může být složitější zpracování, nebo že stejný text zabírá více prostoru na disku nebo v operační paměti počítače. Ovšem výhody univerzální znakové sady drtivě převažují, což je vidět mj. na tom, že starší osmibitové znakové sady jsou dnes definované jako podmnožiny Unicode.

Historie

Ke konci osmdesátých let 20. století vznikla naléhavá potřeba sjednotit různé kódové tabulky znaků pro národní abecedy. Například český jazyk používal v informatice nejméně 5 různě kódovaných tabulek (kódování bratří Kamenických, PC Latin 2, Windows-1250, ISO Latin 2, … [2]). Vznikaly značné problémy při spolupráci aplikací a při přenosech dat mezi programy a různými platformami. Podobná situace byla ve všech jazycích, které nevystačily se základní 7bitovou tabulkou ASCII znaků.

V té době vznikly současně dva projekty pro vytvoření jednotné univerzální kódovací tabulky znaků. Byl to projekt ISO 10646 organizace ISO a projekt Unicode. Norma ISO definuje tzv. UCSUniversal Character Set.

Kolem roku 1991 došlo k dohodě a projekty spojily své úsilí na vytvoření jednotné tabulky. Oba projekty stále existují a publikují své standardy samostatně, ale tabulky znaků jsou kompatibilní a jejich rozšiřování je koordinováno.

Historie verzí Unicode

Unicode verze 1.1 odpovídá normě ISO 10646-1:1993, Unicode 3.0 odpovídá ISO 10646-1:2000, Unicode 4.0 odpovídá třetí verzi ISO 10646:2003. Všechny verze Unicode od 2.0 výše jsou zpětně kompatibilní, jsou přidávány pouze nové znaky, existující znaky nejsou vyřazovány nebo přejmenovávány.

Unicode se drží zároveň důležitého pravidla jednotné metody zjišťování totožnosti znaků, efektivnější a snadněji přizpůsobitelná než předchozí kódovací systémy. Umožňuje současně používat různá písma při vícejazyčném zpracování textu v počítači a kóduje široké portfolio znaků pro profesionální zpracování textů v prakticky jakémkoli moderním i historickém jazyce.

Unicode 7.0

Unicode verze 7.0 bylo vydáno 16. června 2014. Tato verze rozšířila množinu znaků především o asi 250 znaků emodži.[3] Celkem Unicode 7.0 přidává 2834 nových znaků a zavádí 23 nových jazyků.[4] Z celkového počtu znaků jich 327 bylo přidáno do BMP, ostatních 2507 bylo přidáno do Plane 1.

Unicode 8.0

Nejnovější verze normy, The Unicode Standard 8.0.0[5], byla vydána v červnu 2015 a je dostupná na WWW serveru konsorcia. Definuje celkem 120737 grafických znaků ve 129 písmech; zavádí podporu abecedy Ahom, anatolských hieroglyfů, abeced Hatran, Multani, Rovas a znakopisu, doplňuje 5771 unifikovaných CJK ideografů, sadu malých písmen pro slabičné písmo Cherokee a pět emoji modifikátorů pro odstíny kůže[6].

Poslední verze publikovaná v knižní podobě byla verze Unicode 5.2 (ISBN 0-321-48091-0); od verze 6.0 je plný text normy publikován pouze elektronicky; v roce 2012 bylo oznámeno, že od verze 6.1 bude v knižní podobě dostupné pouze jádro normy (v té době čítající 692 stránek) tištěných na žádost.[7] Na rozdíl od předchozích hlavních verzí výtisků normy, tištěná verze nezahrnuje žádné tabulky kódu nebo doplňky standardu. Celý standard, včetně jádra, je volně dostupný na WWW serveru Unicode konsorcia[8].

Původní cíle standardu Unicode

  • Jednotnost - konstantní šířka znaků dovoluje efektivní hledání, třídění, editace a zobrazení prvků.
  • Univerzálnost - kapacita znakové sady musí být dostatečně velká k zahrnutí všech znaků, které by mohly být využity při výměně textů – především ty, které už byly definovány v hlavních mezinárodních, národních a průmyslových znakových sadách.
  • Jednoznačnost - jakákoli 16bitová (dnes 32bitová) hodnota zastupuje v jakémkoliv kontextu stejný znak.
  • Maximální využití - text poskládaný z posloupnosti znaků o konstantní šířce může být snadno zpracován; software si nemusí uchovávat stav, dávat si pozor na speciální escape sekvence nebo prohledávat text dopředu či zpět kvůli určení totožnosti znaků.

Standard Unicode se oproti ISO 10646 navíc zabývá implementací algoritmů pro písma psaná zprava doleva (např. arabština), podporou oboustranných textů (jako např. směs hebrejštiny a latinky), algoritmy pro řazení a porovnávání textů.

V současnosti existuje Unicode ve verzi 5.2, která vyšla v roce 2009.[9] Celkem obsahuje více než 245 000 znaků a symbolů z 90 různých jazyků a abeced.[10] Unicode Consortium již v této chvíli zaručuje, že všechny nové verze budou zpětně kompatibilní s předchozími, tj. že nové standardy budou přidávat další znaky, ale žádné již nebudou odstraňovat ani měnit.

Unicode není používán pro kódování různých nesmyslných a zřídkakdy používaných znaků, znaků pro osobní potřebu, nebo grafiky. Rovněž neobsahuje speciální znaky pro přechodné vkládání textu. Unidoce také nezahrnuje znaky které neslouží k zápisu textu, jako jsou například taneční či hudební značky. Rovněž se nezabývá variantami zobrazení znaků (fonty). Ve znakovém repertoáru Unicode kódování je vyhrazeno 6400 znaků pro potřebu programů, jejichž využití není nijak omezeno.

V souvislosti s jazyky jako je wachánština, jejichž ortografie založené na latince používají několik znaků cyrilice či řeckého písma, byla řešena otázka, zda kvůli nim do Unicode přidat znaky jako latinská delta, latinská théta či latinské jery jako latinské protějšky těchto řeckých a cyrilských písmen.[11] Jeden z názorů na tuto problematiku je, že požadavek, aby jazyk byl zapisován pouze znaky jednoho písma je umělý a že v minulosti si různé jazyky půjčovaly písmena i z jiných písem, takže na soubor písmen latinky, cyrilice a řeckého písma může být nahlíženo jako na latinsko-cyrilsko-řecké metapísmo a tedy pro zápis těchto jazyků používat písmena v Unicode již obsažené místo vytváření nových.[12] I v případě, kdy by tato písmena byla zavedena, lze očekávat, že by i nadále pro zápis byly používány řecké a cyrilské verze těchto písmen, protože latinské verze by byly obsaženy pouze v malém počtu fontů.[11]

Architektura

Bloky Unicode

  • Základní latinka (0000–007F)
  • Doplněk Latin-1 (0080–00FF)
  • Rozšíření latinky A (0100–017F)
  • Rozšíření latinky B (0180–024F)
  • Mezinárodní fonetická abeceda (0250–02AF)
  • Modifikující písmena se šířkou (02B0–02FF)
  • Kombinující diakritické značky (0300–036F)
  • Řecká abeceda a Koptské písmo (0370–03FF)
  • Cyrilice (0400–04FF)
  • Doplněk cyrilice (0500–052F)
  • Arménské písmo (0530–058F)
  • Hebrejské písmo (0590–05FF)
  • Arabské písmo (0600–06FF)
  • Syrské písmo (0700–074F)
  • Doplněk arabského písma (0750–077F)
  • Thaana (0780–07BF)
  • N'Ko (07C0–07FF)
  • Samaritánské písmo (0800–083F)
  • Mandejské písmo (0840–085F)
  • Rozšíření arabštiny A (08A0–08FF)
  • Dévanágarí (0900–097F)
  • Bengálské písmo (0980–09FF)
  • Gurmukhí (0A00–0A7F)
  • Gudžarátí (0A80–0AFF)
  • Urijské písmo (0B00–0B7F)
  • Tamilské písmo (0B80–0BFF)
  • Telužské písmo (0C00–0C7F)
  • Kannadské písmo (0C80–0CFF)
  • Malajálamské písmo (0D00–0D7F)
  • Sinhalské písmo (0D80–0DFF)
  • Thajské písmo (0E00–0E7F)
  • Laoské písmo (0E80–0EFF)
  • Tibetské písmo (0F00–0FFF)
  • Barmské písmo (1000–109F)
  • Gruzínské písmo (10A0–10FF)
  • Hangul Jamo (1100–11FF)
  • Etiopské písmo (1200–137F)
  • Doplněk etiopštiny (1380–139F)
  • Čerokézské písmo (13A0–13FF)
  • Sjednocená slabiková písma původních obyvatel Kanady (1400–167F)
  • Ogam (1680–169F)
  • Runy (16A0–16FF)
  • Tagalog (1700–171F)
  • Hanunoo (1720–173F)
  • Buhid (1740–175F)
  • Tagbanwa (1760–177F)
  • Khmerské písmo (1780–17FF)
  • Mongolské písmo (1800–18AF)
  • Limbu (1900–194F)
  • Tai Le (1950–197F)
  • Nové Tai Le (1980–19DF)
  • Khmerské symboly (19E0–19FF)
  • Lontara (1A00–1A1F)
  • Tai Tham (1A20–1AAF)
  • Rozšíření kombinujících diakritických značek (1AB0–1AFF)
  • Baliské písmo (1B00–1B7F)
  • Sundánské písmo (1B80–1BBF)
  • Batak (1BC0–1BFF)
  • Lepcha (1C00–1C4F)
  • Ol Chiki (1C50–1C7F)
  • Doplněk sundánštiny (1CC0–1CCF)
  • Védská rozšíření (1CD0–1CFF)
  • Fonetické rozšíření (1D00–1D7F)
  • Doplněk fonetických rozšíření (1D80–1DBF)
  • Doplněk kombinujících diakritických značek (1DC0–1DFF)
  • Dodatek rozšířené latinky (1E00–1EFF)
  • Rozšíření řecké abecedy (1F00–1FFF)
  • Všeobecná interpunkční znaménka (2000–206F)
  • Horní a dolní indexy (2070–209F)
  • Symboly měn (20A0–20CF)
  • Kombinující diakritické značky pro symboly (20D0–20FF)
  • Písmenové symboly (2100–214F)
  • Číselné formy (2150–218F)
  • Šipky (2190–21FF)
  • Matematické operátory (2200–22FF)
  • Různé technické znaky (2300–23FF)
  • Obrázky k řídicím znakům (2400–243F)
  • Znaky pro optické rozpoznávání (2440–245F)
  • Ohraničené alfanumerické znaky (2460–24FF)
  • Kreslení rámečků (2500–257F)
  • Blokové prvky (2580–259F)
  • Geometrické tvary (25A0–25FF)
  • Různé symboly (2600–26FF)
  • Symboly dingbat (2700–27BF)
  • Různé matematické symboly A (27C0–27EF)
  • Doplňující šipky A (27F0–27FF)
  • Braillovo písmo (2800–28FF)
  • Doplňující šipky B (2900–297F)
  • Různé matematické symboly B (2980–29FF)
  • Doplňující matematické operátory (2A00–2AFF)
  • Různé symboly a šipky (2B00–2BFF)
  • Hlaholice (2C00–2C5F)
  • Rozšíření latinky C (2C60–2C7F)
  • Koptské písmo (2C80–2CFF)
  • Doplněk gruzínštiny (2D00–2D2F)
  • Tifinagh (2D30–2D7F)
  • Rozšíření etiopštiny (2D80–2DDF)
  • Rozšíření cyrilice A (2DE0–2DFF)
  • Doplňující interpunkce (2E00–2E7F)
  • Doplněk CJK radikálů (2E80–2EFF)
  • Radikály Kchang-si (2F00–2FDF)
  • Ideografické popisné znaky (2FF0–2FFF)
  • CJK symboly a interpunkce (3000–303F)
  • Hiragana (3040–309F)
  • Katakana (30A0–30FF)
  • Bopomofo (3100–312F)
  • Hangul kompatibilní Jamo znaky (3130–318F)
  • Kanbun znaky (3190–319F)
  • Rozšíření Bopomofo (31A0–31BF)
  • CJK tahy (31C0–31EF)
  • Fonetická rozšíření Katakany (31F0–31FF)
  • Ohraničené CJK znaky a měsíce (3200–32FF)
  • Kompatibilita CJK (3300–33FF)
  • Rozšíření sjednocených znaků CJK A (3400–4DBF)
  • Hexagramové symboly I-ťing (4DC0–4DFF)
  • Sjednocené znaky CJK (4E00–9FFF)
  • Slabiky jazyka Yi (A000–A48F)
  • Radikály jazyka Yi (A490–A4CF)
  • Lisu (A4D0–A4FF)
  • Vai (A500–A63F)
  • Rozšíření cyrilice B (A640–A69F)
  • Bamum (A6A0–A6FF)
  • Písmena pro modifikátory tónu (A700–A71F)
  • Rozšíření latinky D (A720–A7FF)
  • Sylheti Nagari (A800–A82F)
  • Společné formy indických čísel (A830–A83F)
  • Phags-pa (A840–A87F)
  • Sauraštra (A880–A8DF)
  • Rozšíření Dévanágarí (A8E0–A8FF)
  • Kayah Li (A900–A92F)
  • Rejang (A930–A95F)
  • Rozšíření Hangul Jamo A (A960–A97F)
  • Javánské písmo (A980–A9DF)
  • Rozšíření barmštiny B (A9E0–A9FF)
  • Cham (AA00–AA5F)
  • Rozšíření barmštiny A (AA60–AA7F)
  • Tai Viet (AA80–AADF)
  • Rozšíření Manipuri (ABC0–ABFF)
  • Slabiky Hangul (AC00–D7AF)
  • Rozšíření Hangul Jamo B (D7B0–D7FF)
  • Horní surrogates (D800–DB7F)
  • Horní surrogates pro soukromé využití (DB80–DBFF)
  • Dolní surrogates (DC00–DFFF)
  • Oblast pro soukromé využití (E000–F8FF)
  • CJK kompatibilní ideogramy (F900–FAFF)
  • Abecední prezentační formy (FB00–FB4F)
  • Arabské prezentační formy A (FB50–FDFF)
  • Selektory variant (FE00–FE0F)
  • Svislé formy (FE10–FE1F)
  • Kombinující poloznačky (FE20–FE2F)
  • CJK kompatibilní formy (FE30–FE4F)
  • Malé varianty forem (FE50–FE6F)
  • Arabské prezentační formy B (FE70–FEFF)
  • Znaky plné šířky a poloviční šířky (FF00–FFEF)
  • Speciální (FFF0–FFFF)
  • Slabičné znaky lineárního písma B (10000–1007F)
  • Ideogramy lineárního písma B (10080–100FF)
  • Egejská čísla (10100–1013F)
  • Starořecká čísla (10140–1018F)
  • Starověké symboly (10190–101CF)
  • Znaky Disku z Faistu (101D0–101FF)
  • Lýkijské písmo (10280–1029F)
  • Kárské písmo (102A0–102DF)
  • Koptská epaktová čísla (102E0–102FF)
  • Staroitalické písmo (10300–1032F)
  • Gótské písmo (10330–1034F)
  • Staropermské písmo (10350–1037F)
  • Ugarské písmo (10380–1039F)
  • Staroperské písmo (103A0–103DF)
  • Deseretské písmo (10400–1044F)
  • Showova abeceda (10450–1047F)
  • Somálské písmo (10480–104AF)
  • Kyperské slabičné písmo (10800–1083F)
  • Byzantské hudební symboly (1D000–1D0FF)
  • Hudební symboly (1D100–1D1FF)
  • Tai-Xuan-Jing symboly (1D300–1D35F)
  • Matematické alfanumerické symboly (1D400–1D7FF)
  • Jednotné ideografické rozšíření CJK B (20000–2A6DF)
  • Doplněk kompatibilních ideogramů CJK (2F800–2FA1F)
  • Značky (E0000–E007F)
  • Doplněk různých selektorů (E0100–E01EF)
  • Doplňující oblast pro soukromé použití A (F0000–FFFFF)
  • Doplňující oblast pro soukromé použití B (100000–10FFFD)

Skupiny Unicode

  • Písma
    • podle místa původu
      • Evropa
      • Afrika
      • Blízký východ
      • Střední Asie
      • Jižní Asie
      • Jihovýchodní Asie
      • Východní Asie
      • Indonésie a Oceánie
      • Amerika
    • kombinující diakritika
    • fonetické znaky a zkratky
      • IPA
  • Číslice a číselné znaky
    • číselné formy
    • zlomky
    • horní/dolní indexy
  • Interpunkční znaménka
    • obecná interpunkce
  • CJK
  • Symboly
    • alfanumerické
    • kombinující diakritika
    • technické symboly
    • matematické symboly
    • ostatní symboly
  • Speciální
    • kontrolní znaky
    • osobní použití
    • náhradní symboly
    • „ne-znaky“
    • rezervované znaky

Znaky Unicode

Každý znak má jednoznačný číselný kód a svůj název. Navíc Unicode definuje u každého znaku některé základní vlastnosti, jako např. zda se jedná o písmeno, symbol atd., zda je písmeno velké či malé atp.

Tabulka Unicode poskytuje prostor pro 1 114 112 znaků s kódy 016 až 10FFFF16. Tento prostor se dělí na 17 částí, každý o velikosti 216. První část se nazývá Basic Multilingual Plane (BMP) a obsahuje znaky běžně používaných abeced. Původní 16bitový návrh Unicode počítal jen s BMP, následně se ale ukázalo, že pro pokrytí všech používaných abeced to nestačí.

Prvních 128 znaků (tj. sedmibitové kódy) obsahuje znakovou sadu ASCII. Osmibitové kódy (tj. prvních 256 znaků) obsahují znakovou sadu ISO 8859-1 (ISO 8859-1 obsahuje ASCII).

Kódování

BOM
(hexa)
Velikost
prostoru Unicode
Kódování velikost
atomu
(B,1B=8b)
počet
atomů
maximální
délka znaku
(B,1B=8b)
EF BB BF 21b, větší než BMP UTF-8 1B 1 až 4 4B
FE FF 21b, větší než BMP UTF-16, varianta UTF-16BE, (big-endian) 2B 1 až 2 4B
FF FE 21b, větší než BMP UTF-16, varianta UTF-16LE, (little-endian) 2B 1 až 2 4B
00 00 FE FF 32b, větší než BMP UTF-32, varianta UTF-32BE, (big-endian) 2B 2 4B
FF FE 00 00 32b, větší než BMP UTF-32, varianta UTF-32LE, (little-endian) 2B 2 4B
EF BB BF 31b, větší než BMP UTF-8, rozšíření 1B 1 až 6 6B
FE FF 16b, právě BMP UCS-2, varianta UCS-2BE, (big-endian) 2B 1 2B
FF FE 16b, právě BMP UCS-2, varianta UCS-2LE, (little-endian) 2B 1 2B
- 8b, menší než BMP ASCII + code page 1B 1 1B
- 7b, menší než BMP ASCII 1B 1 1B

Existuje několik různých způsobů, jak znaky Unicode kódovat. Základní kódování, definovaná přímo ve standardu Unicode, jsou:

  • UTF-32,
  • UTF-16,
  • UTF-8,
  • UCS-2.

Kódování UTF-32, UTF-16 a UCS-2 mají každá své varianty podle používaného pořadí bajtů. Buď je napevno stanoveno pořadí little-endian, resp., big-endian, nebo se toto pořadí určuje podle tzv. byte order mark (BOM), speciální značky umístěné na začátku textu.

Za kódování Unicode můžeme považovat také čínský standard GB18030.

UTF-32

V kódování UTF-32 (též označováno jako UCS-4) je každý znak reprezentován přímo 32bitovým číslem. Jedná se tedy o principiálně velmi jednoduché kódování (jeho hlavní výhodou je stejná délka všech znaků), které však má poměrně vysoké nároky na paměť. Při serializaci do posloupnosti bajtů se podle endianity rozlišují varianty UTF-32BE (big-endian), UTF-32LE (little-endian) a UTF-32 (nestanoveno, může být určeno pomocí BOM).

UTF-16

V kódování UTF-16 se znaky BMP reprezentují jedním 16bitovým číslem, znaky mimo BMP jsou reprezentovány párem 16bitových čísel (tzv. surrogate pair). Pro surrogate pairs se používají čísla v rozsahu D80016–DFFF16, přičemž odpovídající znaky v BMP (U+D800 – U+DFFF) jsou rezervovány pro tento účel, nemohou se proto v původním textu vyskytnout.

Existuje starší obdoba tohoto kódování, kódování UCS-2, které znaky BMP kóduje shodně jako UTF-16, ale nepodporuje surrogate pairs a znaky mimo BMP v něm vůbec nelze reprezentovat.

I zde se podle endianity rozlišují varianty UTF-16BE (big-endian), UTF-16LE (little-endian) a UTF-16 (nestanoveno, může být určeno pomocí BOM).

UTF-16 je výrazně úspornější než UTF-32, ale ztrácí jeho výhodu pevné šířky znaku – některé znaky jsou široké 2 bajty, některé 4. Přesto se jedná o kódování používané jako základní ve velkém množství operačních systémů a dalšího softwaru (např. Microsoft Windows, .NET Framework atd.).

UTF-8

UTF-8 kóduje znaky různě dlouhou (1–4 bajty, pro původní 31bitové ISO/IEC 10646 až 6 bajtů) posloupností bajtů podle jejich kódu v Unicode. Znaky ASCII (U+0000 – U+007F) jsou kódovány jedním bajtem, identicky jako v ASCII, znaky v rozsahu U+0080 – U+07FF (kde jsou také všechny znaky s diakritikou používané v české abecedě) jsou kódovány dvěma bajty, znaky U+0800 – U+FFFF (kam patří znak Euro – € – U+20AC) jsou kódovány třemi bajty, znaky mimo BMP jsou kódovány čtyřmi bajty. Znaky s vyššími kódy podle původního návrhu ISO/IEC 10646 by používaly pětibajtové a šestibajtové kódování.

UTF-8 se často používá pro přenos dat, neboť je prostorově úsporné (hlavně pro texty psané latinkou s nevelkým počtem znaků s diakritikou, které obsahují většinu jednobajtových a zbytek dvoubajtových kódů; v nelatinkových písmech je většina textu tvořena dvoubajtovými kódy, písma Dálného východu používají tříbajtové kódy), je odolné proti chybám a zpětně kompatibilní s ASCII. Při jeho zpracování je však nepříjemná nestejná délka znaků.[13]

Použití BOM jako příznaku endianity je u UTF-8 zbytečné (pořadí bajtů je jednoznačně určeno), BOM však může posloužit pro snadnou detekci, že se jedná o UTF-8.

UTF-8 je popsané v ISO 10646-1:2000 Annex D a také v RFC 3629.

UCS-2

UCS-2 je původní způsob zápisu Unicode znaků. Pro uložení dat se využívá posloupnost dvoubajtových částí. Konec textového řetězce může být označen například 16bitovým NULL, tedy 0x0000; je potřeba dát si pozor, že osmibitové NULL (0x00) se může objevovat v nižším nebo vyšším bajtu čísla Unicode znaku. Velkou výhodou UCS-2 oproti jiným formám je konstantní délka znaku a snadné zjišťování počtu znaků v řetězci, je tedy vhodná zejména pro vnitřní reprezentaci Unicode znaků v programu.

Další kódování

Z různých důvodů existují také další méně často používaná kódování, jako jsou např. UTF-7 či CESU-8.

Využití

Operační systémy

Znakovou sadu Unicode používá většina moderních operačních systémů. Operační systémy Microsoft Windows používají pro vnitřní zápis znaků (např. jména souborů a adresářů v NTFS) od Windows 2000 kódování UTF-16, avšak zároveň se v české mutaci používá kódování CP1250 (historicky) a CP852 (v příkazovém řádku).

Většina distribucí Linuxu používá buď rovnou UTF-8 nebo umožňuje jeho ruční nastavení.

Aplikace

Některé starší aplikace Unicode (dosud) nepodporují. Na druhé straně pro některé systémy je Unicode již jedinou používanou znakovou sadou.

Programovací jazyky Java a jazyky podporující Common Language Infrastructure (např. C#) vnitřně používají šestnáctibitovou verzi Unicode a navenek podporují mnoho různých kódování.

Též systémy řízení báze dat dnes již často používají Unicode pro uložení znakových údajů.

Na Unicode je založen kancelářský balík Microsoft Office od verze 97.

Web

Unicode je znakovou sadou pro HTML dokumenty od verze 4.0 a pro všechny XML dokumenty. Výchozím kódováním je UTF-8, které všechny prohlížeče podporují už delší dobu.

Čeština

Na rozdíl od dřívějších osmibitových tabulek znaků jako je bratří Kamenických, Latin 2, Windows-1250 či ISO-8859-2 lze všechny znaky zobrazit zároveň; v jednom textu lze tedy kombinovat např. češtinu (latinka), ruštinu (azbuka) a řečtinu (alfabeta).

Tabulka českých znaků Unicode

znak HTML entita dec hex UTF-8 v URL znak HTML entita dec hex UTF-8 v URL
Á &Aacute; 193 U+00C1 %C3%81 á &aacute; 225 U+00E1 %C3%A1
Č &Ccaron; 268 U+010C %C4%8C č &ccaron; 269 U+010D %C4%8D
Ď &Dcaron; 270 U+010E %C4%8E ď &dcaron; 271 U+010F %C4%8F
É &Eacute; 201 U+00C9 %C3%89 é &eacute; 233 U+00E9 %C3%A9
Ě &Ecaron; 282 U+011A %C4%9A ě &ecaron; 283 U+011B %C4%9B
Í &Iacute; 205 U+00CD %C3%8D í &iacute; 237 U+00ED %C3%AD
Ň &Ncaron; 327 U+0147 %C5%87 ň &ncaron; 328 U+0148 %C5%88
Ó &Oacute; 211 U+00D3 %C3%93 ó &oacute; 243 U+00F3 %C3%B3
Ř &Rcaron; 344 U+0158 %C5%98 ř &rcaron; 345 U+0159 %C5%99
Š &Scaron; 352 U+0160 %C5%A0 š &scaron; 353 U+0161 %C5%A1
Ť &Tcaron; 356 U+0164 %C5%A4 ť &tcaron; 357 U+0165 %C5%A5
Ú &Uacute; 218 U+00DA %C3%9A ú &uacute; 250 U+00FA %C3%BA
Ů &Uring; 366 U+016E %C5%AE ů &uring; 367 U+016F %C5%AF
Ý &Yacute; 221 U+00DD %C3%9D ý &yacute; 253 U+00FD %C3%BD
Ž &Zcaron; 381 U+017D %C5%BD ž &zcaron; 382 U+017E %C5%BE

Odkazy

Reference

V tomto článku byl použit překlad textu z článku Unicode na anglické Wikipedii.

  1. The Unicode Standard: A Technical Introduction [online]. [cit. 2010-03-16]. Dostupné online. 
  2. Přehled kódování češtiny
  3. NĚMEC, Petr. Unicode Standard 7.0: přibližně 250 nových „smajlíků“. Root.cz [online]. 2014-06-17 [cit. 2014-08-26]. Dostupné online. ISSN 1212-8309. 
  4. Unicode 7.0.0 na unicode.org, cit. 2014-08-26
  5. Unicode verze 8.0.0
  6. Unicode Data 8.0.0 [online]. [cit. 2015-06-17]. Dostupné online. 
  7. Unicode 6.1 Paperback Available [online]. Dostupné online. 
  8. The Unicode Consortium
  9. About the Unicode Standard
  10. Unicode Scripts
  11. a b Jim Allan, mixed-script writing systems, 2002-11-15, cit. 2014-08-27
  12. Kenneth Whistler, mixed-script writing systems, 2002-11-15, cit. 2014-08-27
  13. The Unicode Standard, Version 5.2, kapitola 2.5 Encoding Forms, s. 28

Literatura

Externí odkazy