V sobotu 2. listopadu proběhla mohutná oslava naší plnoletosti !!
Multimediaexpo.cz je již 18 let na českém internetu !!

Znaková sada

Z Multimediaexpo.cz

(Rozdíly mezi verzemi)

Verze z 12. 4. 2011, 15:22

Znaková sada nebo také kódování (také kódová stránka) je kód, který páruje sekvence znaků z dané množiny (abecedy) s jejich jinou reprezentací, jako je sekvence přirozených čísel, bytů nebo elektrických pulzů, za účelem ukládání textu v počítači nebo přenosu textu telekomunikačními sítěmi. Příkladem může být Morseova abeceda, která kóduje písmena latinky (a další znaky) pomocí sérií dlouhých a krátkých stisků telegrafního klíče. Dalším příkladem je znaková sada ASCII, která kóduje 128 znaků americké abecedy s číslicemi a dalšími symboly jako 7bitová čísla. Kódování je také prostředkem pro kompresi (tj. zmenšení) anebo šifrování (tj. utajování) dat. Proces standardizace začal zavedením znakových sad ASCII (1963) a EBCDIC (1964). Omezení těchto sad brzy vyplavala na povrch a vedla tak k vytvoření mnoha ad-hoc rozšíření. Potřeba podporovat více skriptovacích systémů včetně rodiny CJK – východoasijských skriptů si vyžádala ve srovnání s předchozími ad-hoc experimenty podporu mnohem většího množství znaků a rovněž systematický přístup k jejich kódování.

Obsah

Jednoduché znakové sady

Konvenční znakové sady a kódování znaků byly shodné, stejný standard specifikoval, které znaky byly dostupné a současně jak mají být zakódovány v sekvencích kódových jednotek (obvykle jeden znak na kódovou jednotku). Z historických důvodů MIME a jiné systémy založené na těchto sadách používaly termín znaková sada i pro systémy pro kompletní kódování sekvencí znaků do sekvence bytů (oktetů).

Moderní přístup ke kódování

Unicode a jeho paralelní standard ISO 10646, tuto ideu překonávají oddělením dostupných znaků a jejich číslování od toho, jakým způsobem jsou tyto znaky kódovány jako série „kódových jednotek“ (čísel omezené velikosti) a jakým způsobem jsou tyto jednotky kódovány do sekvence bytů (oktetů). Cílem této dekompozice je ustavit univerzální znakovou sadu, která může být kódována množstvím způsobů. Proto byly zavedeny následující pojmy:

Znakový repertoár
plná sada znaků podporovaná daným systémem. Tento repertoár může být uzavřený nebo otevřený, dovolující rozšiřování (což je případ Unikódu). Základní sady latinky, řecké abecedy a cyrilice mohou být rozděleny na písmena, číslice, interpunkci a několik speciálních znaků, jako je např. mezera. Dokonce i zde představuje určitou komplikaci diakritika, protože může být implementována buď pomocí znaků obsahujících diakritiku (což je mnohem jednodušší při zpracování), nebo pomocí kombinace základních znaků a diakritických znaků (což dovoluje mnohem větší volnost kombinací). Znakový repertoár jiných skriptovacích systémů, jako jsou arabský nebo hebrejský, je mnohem složitější, protože zahrnuje možnosti jako je obousměrný text a různá spojování glyfů (grafických interpretací znaku) v různých situacích.
Kódovaná znaková sada
určuje, jak má být reprezentován repertoár znaků užitím nezáporných celých čísel nazývaných kódové body. Např. znaku velké „A“ může být přiřazeno číslo 65, znaku velké „B“ 66 atd., až je pokryta celá abeceda. Určitá sada znaků a jejich čísel pak tvoří kódovanou znakovou sadu. Kódované znakové sady mohou sdílet stejný repertoár, ale mapovat jej jiným způsobem, jak je tomu např. u ISO-8859-1 a kódových stránek IBM CP037 a CP500. V kódované znakové sadě představuje jeden kódový bod jediný znak.
Forma kódování znaků (CEF)
popisuje převod kódů z kódované znakové sady na sadu celočíselných hodnot kódu pro ukládání v systému reprezentujícím čísla v binární formě za použití omezeného počtu bitů (prakticky každý počítač). CEF tedy předepisuje např. způsob jak převést kódový bod např. z rozmezí 0 až 1,4 miliónu na sérii jedné nebo více hodnot kódu v rozmezí např. od 0 do 65535 (16bitové číslo).
Nejjednodušší je zvolit takovou formu kódování (CEF), kde každému bodu kódu odpovídá jedna hodnota kódu. To je však neúsporné – např. pro kódování latinky stačí 1 byte (viz 7bitové ASCII), zatímco Unicode vyžaduje minimálně 21 bitů (prakticky 3 byty). Proto byla definována kódování UTF-8 (po bytech) resp. UTF-16 (po slovech), která kódují znak do sekvence bytů resp. slov (dvoubytů).
Systém kódování
definuje rozklad kódových hodnot na byty. V praxi jde o to, že některé systémy při ukládání ukládají vícebytová čísla v pořadí od nejvyššího byte k nejnižšímu (little endian) a jiné v pořadí od nejnižšího k nejvyššímu (big endian). Je vhodné poznamenat, že kódování UTF-8 tyto komplikace obchází, přičemž je navíc kompatibilní s ASCII. Existují také složená kódování, která používají escape sekvence pro přepínání mezi několika jednoduchými schématy (jako ISO 2022) a kompresní schémata, která minimalizují počet bytů na jednotku kódu (SCSU, BOCU a Punycode).

Lexikální řazení

Součástí standardů pro kódování znaků je obvykle i informace, jakým způsobem se v konkrétním jazyce provádí lexikální (abecední, alfabetní, …) řazení. Řazení nelze většinou provést jen prostým porovnáním kódových hodnot znaků (tzv. ordinální řazení), protože většina jazyků má různé výjimky (např. české Ch). Ne vždy lze realizovat lexikální řazení přidaných znaků do znakové sady.

Znakové sady a HTML

Aby nemusel uživatel u každé stránky hledat v menu znakovou sadu vhodnou pro její zobrazení, je možné v HTML hlavičce uvést znakovou sadu, ve které byla daná stránka vytvořena.

<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=Windows-1250">
pro sadu Windows-1250 (sada používaná v českých Windows).
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-2">
pro texty vytvořené ve standardizované sadě ISO 8859-2, např. v Linuxu.
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
UTF-8 je vhodné použít pro vícejazyčné dokumenty a stránky obsahující zvláštní znaky nepodporované předchozími sadami (ve Windows XP je ukládání do UTF-8 podporováno v Poznámkovém bloku).

Všechny dnes běžně rozšířené prohlížeče (Windows Internet Explorer, Firefox, Opera) tento tag implementují, jeho interpretace však závisí také na nastavení webového serveru. Stránka zobrazená z lokálního disku správně může při stažení ze serveru vypadat jako „rozsypaný čaj“ – dokud uživatel nevnutí prohlížeči ručně správné kódování nebo neupraví nastavení webserveru, který posílá prohlížeči chybnou informaci o kódování v http hlavičce. Poměrně univerzálně fungující možností je vkládání znaků pomocí escape sekvencí. Sekvence &#n; zobrazí znak s unikódovou hodnotou n. Například sekvence &#225; zobrazí český znak á. V tomto případě byla hodnota znaku uvedena decimálně, pokud bychom ji chtěli uvést hexadecimálně, použijeme sekvenci &#xn; (např. &#xE1; pro znak á).

ASCII

ASCII je nepochybně základním kódováním, z kterého vychází v euro-americkém prostoru ostatní standardy. Drtivá většina osmibitových znakových sad pouze rozšiřuje ASCII tím, že přidávají významy kódům 128-255, které se v ASCII nepoužívají.

Kódování češtiny

Sada Popis
CP852 osmibitové kódování češtiny v systému MS-DOS
ISO 8859-2 osmibitové kódování češtiny v UNIXových systémech
Windows-1250 osmibitové kódování češtiny používané v systémech Microsoft Windows
Kód Kamenických osmibitové kódování češtiny částečně kompatibilní s CP437 (zachovává semigrafické znaky)
Unicode současná celosvětová znaková sada, používaná v současných OS

Standardy ISO 8859-x

Standardy ISO/IEC 8859-x definují osmibitové znakové sady, používané zvláště v UNIXu/LINUXu. Novější unixové distribuce již přecházejí na Unicode s kódováním UTF-8.

Sada Skript
ISO 8859-1 Latin-1, Západoevropský
ISO 8859-2 Latin-2, Východoevropský
ISO 8859-3 Latin-3, Jihoevropský
ISO 8859-4 Latin-4, Baltský
ISO 8859-5 Cyrilice
ISO 8859-6 Arabský
ISO 8859-7 Řecký
ISO 8859-8 Hebrejský
ISO 8859-9 Latin-5, Turecký
ISO 8859-10 Latin-6, Nordický
ISO 8859-11 Thaiský
ISO 8859-13 Latin-7, Baltský
ISO 8859-14 Latin-8, Keltský
ISO 8859-15 Latin-9, Západoevropský
ISO 8859-16 Latin-10, Jihovýchodoevropský

Vybrané kódové stránky Windows

Operační systémy rodiny Microsoft Windows používají několik osmibitových kódování, více nebo méně podobných standardům ISO8859-x. Kromě toho interně používají pro definici fontů šestnáctibitovou znakovou sadu WGL-4 (windows glyph 4), která obsahuje všechny znaky ze zde zmiňovaných kódových stránek Windows-1250 až Windows-1258.

Sada Skript
Windows-1250 Latin-2, Středoevropský (podobný ISO8859-2)
Windows-1251 Cyrilice
Windows-1252 Latin-1, Západoevropský (rozšiřuje ISO 8859-1)
Windows-1253 Řecký (podobné ISO 8859-7)
Windows-1254 Turecký (shoduje se s ISO 8859-9)
Windows-1255 Hebrejský (rozšiřuje ISO 8859-8)
Windows-1256 Arabský (částečně shodný s ISO 8859-6)
Windows-1257 Latin 13, Baltský (téměř shodný s ISO 8859-13)
Windows-1258 Vietnamský (velmi podobný Windows-1252)

Vícebytové standardy

Kódování Popis
UTF-8 kódování unicode s nejmenší kódovou jednotkou délky osm bitů. Nezávisí na tom zda je systém „little-endian“ nebo „big endian“, je kompatibilní s ASCII.
UTF-16 jiné kódování unicode používané ve Windows a v jazyku Java. Nejmenší kódová jednotka má délku šestnáct bitů, má varianty „little-endian“ a „big-endian“, není kompatibilní s ASCII.
GB18030 oficiální standard pro kódování čínštiny. Jde o netriviálně přemapovaný unicode, tak aby byl kompatibilní s GBK. Nejmenší kódová jednotka má délku osm bitů, je kompatibilní s ASCII.
GBK microsoftí kódování čínštiny. Nejmenší kódová jednotka má délku osm bitů, je kompatibilní s ASCII.
UCS-2 překonaný šestnáctibitový kód implementující pouze základní rovinu unicode, je nahrazen UTF-16. Používal se ve Windows NT a Windows 2000.
WGL4 panevropská šestnáctibitová microsoftí sada fontů

Znakové sady pro DOS

Tyto znakové sady jsou osmibitovým kompatibilním rozšířením ASCII (že definují význam kódů 128 až 255).

Kódování Popis
CP437 původní znaková sada MS-DOS / IBM-PC (USA)
CP737 řečtina (vychází z CP437)
CP850 západní Evropa (velmi podobná CP858)
CP852 "východoevropské" jazyky (čeština, slovenština,polština,rumunština, ...) a němčina
CP855 cyrilice (nepříliš používaná)
CP857 turečtina
CP858 západní Evropa (velmi podobná CP850)
CP860 portugalština
CP861 severské jazyky (islandština)
CP863 francouzština (Kanada)
CP865 severské jazyky kromě islandštiny (velmi podobná CP437)
CP866 ruština
CP869 řečtina (méně populární než CP737)
Kód Kamenických kódování češtiny a slovenštiny vycházející ze sady CP437

Jiné standardy

Související články