Kódování znaků

Technology
12 hours ago
8
4
2
Avatar
Author
Albert Flores

[[Soubor:ASCII_full.svg|náhled|vpravo|alt="!"#$%&'*+,-./0123456789:;?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{

}~"|95 tisknutelných znaků znakové sady ASCII má kódy 33 až 126]] Kódování znaků nebo znakový kód je ve výpočetní technice kód, který každému znaku přiřazuje určité číslo (bajt, sekvenci elektrických pulzů ap. ). +more Znaková sada označuje množinu všech znaků zvoleného kódování, které jsou uspořádány podle kódových bodů, tedy pozic v tabulce znaků seřazených podle kódů. Znakem se rozumí písmena různých abeced, číslice, symboly a jiné grafémy, ale také nezobrazované řídící znaky, které mají zvláštní funkce.

Znaková sada je obdobou Morseovy abecedy, která kóduje písmena latinky (a další znaky) pomocí sérií dlouhých a krátkých stisků telegrafního klíče.

Součástí prakticky všech v současnosti používaných kódování je 7bitový kód ASCII, který obsahuje písmena latinky bez diakritiky, číslice, základní symboly a pomocné formátovací znaky. Současná kódování znaků vychází ze světového standardu Unicode, případně z čínského standardu GB18030, které mají shodný znakový repertoár. +more Tento znakový repertoár pokrývá prakticky všechny znaky používané dnes lidstvem.

Proces standardizace

Po přijetí de facto standardů dálnopisných kódů bylo významným krokem standardizace vytvoření znakových kódů ASCII (1963) a EBCDIC (1964). +more Kód ASCII reprezentuje 33 řídicích a 95 tisknutelných znaků včetně malých a velkých písmen anglické abecedy, číslic a dalších symbolů pomocí 7bitových čísel; kód EBCDIC reprezentuje poněkud širší sadu znaků pomocí 8bitových čísel. Zatímco kód EBCDIC zůstal omezen na sálové počítače firmy IBM a jejich kopie, kód ASCII byl převzat různými národními i mezinárodními standardizačními organizacemi, například jako ISO/IEC 646 nebo T. 50, a na jeho základě vzniklo množství národních variant používajících 7bitové kódy. Jejich velkou nevýhodou bylo, že symboly, jejichž používání se mezitím rozšířilo, nahrazují národními znaky, takže při volbě nevhodného kódování se např. texty programů mohou proměnit v nečitelnou změť znaků. Většího rozšíření se proto dočkaly 8bitové kódy, které zpravidla ponechávají kódy ASCII beze změn. Jedním 8bitovým kódem však nelze reprezentovat latinku, řecké písmo, cyrilici (azbuku), arabštinu a hebrejštinu, ani pokrýt všechny znaky latinky s diakritickými znaménky používanými v různých jazycích. Významné firmy jako Microsoft, IBM a Apple navíc vyvinuly vlastní osmibitové kódy, které přivedly kódování národních znaků na pokraj chaosu. Nejednotnost osmibitových kódování spolu s potřebou jednotné reprezentace asijských písem včetně rodiny CJK vedly okolo roku 1990 k vytvoření standardů Unicode a ISO 10646 vyvíjených ve vzájemné součinnosti, jejichž postupně uskutečňovaným záměrem je vytvořit jednotné kódovaní pro reprezentaci všech písem používaných na planetě Zemi.

Terminologie

Zatímco znaková sada je prostý souhrn znaků, kódování znaků definuje navíc i přiřazení kódů jednotlivým znakům. Kódem může být například Morseova abeceda, kódující písmena latinky, číslice a několik dalších znaků pomocí sérií dlouhých a krátkých stisků telegrafního klíče, nebo kombinace dírek na děrném štítku nebo děrné pásce; ve výpočetní technice se však znaky nejčastěji reprezentují celými čísly, která se například ve standardu Unicode nazývají kódový bod . +more Pro kódování znaků se někdy používá termín kódovaná znaková sada , ale v praxi se oba termíny často používají jako synonyma. Protože znaková sada obvykle zahrnuje jak tisknutelné tak netisknutelné znaky, není starší termín pro kódování znaků abecedně-číslicový kód příliš vhodný. ČSN pro znakovou sadu používá termín soubor znaků, který však obsahuje slovo soubor používané jinde ve výpočetní technice ve významu sada dat umístěných na datovém médiu.

V mnoha operačních systémech se pro kódování znaků používá termín kódová stránka ( případně ), v některých prostředích termín abeceda .

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ů. +more 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). +more 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ř. +more 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ř. +more 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ř. +more 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ů). Nejpoužívanější znaky jsou zakódovány pomocí jednoho nebo dvou bytů, což vede k úspoře paměti.

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). +more 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/IEC 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. +more 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 [url=-EQUIV="Content-Type" CONTENT="text/html; charset=Windows-1250"> :pro sadu [[Windows-1250]url=-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-2"> :pro texty vytvořené ve [[standard]url=-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"> :[[UTF-8][HyperText Markup Language|HTML]] hlavičce uvést znakovou sadu, ve které byla daná stránka vytvořena.

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

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

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.

130SadaSkript
ISO 8859-1Latin-1, Západoevropský
ISO 8859-2Latin-2, Východoevropský
ISO 8859-3Latin-3, Jihoevropský
ISO 8859-4Latin-4, Baltský
ISO 8859-5Cyrilice
ISO 8859-6Arabský
ISO 8859-7Řecký
ISO 8859-8Hebrejský
ISO 8859-9Latin-5, Turecký
ISO 8859-10Latin-6, Nordický
ISO 8859-11Thajský
ISO 8859-13Latin-7, Baltský
ISO 8859-14Latin-8, Keltský
ISO 8859-15Latin-9, Západoevropský
ISO 8859-16Latin-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.

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

Vícebytové standardy

130KódováníPopis
UTF-8kó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. +more
UTF-16jiné 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“ (UTF-16LE a UTF-16BE), není kompatibilní s ASCII.
UTF-32přímé kódování unicode, jednomu kódovému bodu odpovídá jedno čtyřbajtové číslo. Je vhodný pro rychlé zpracování, ale velmi neúsporný pro ukládání. Nejmenší kódová jednotka má délku 32 bitů, má varianty „little-endian“ a „big-endian“ (UTF-32LE a UTF-32BE), není kompatibilní s ASCII.
GB18030oficiá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.
GBKmicrosoftí kódování čínštiny. Nejmenší kódová jednotka má délku osm bitů, je kompatibilní s ASCII.
UCS-2př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.
WGL4panevropská šestnáctibitová microsoftí sada fontů
.

Znakové sady pro DOS

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

130KódováníPopis
CP437původní znaková sada MS-DOS / IBM-PC (USA)
CP737řečtina (vychází z CP437)
CP850západní Evropa (velmi podobná CP858)
CP852"východoevropské" jazyky (čeština, slovenština,polština,rumunština, ...) a němčina
CP855cyrilice (nepříliš používaná)
CP857turečtina
CP858západní Evropa (velmi podobná CP850)
CP860portugalština
CP861severské jazyky (islandština)
CP863francouzština (Kanada)
CP865severské jazyky kromě islandštiny (velmi podobná CP437)
CP866ruština
CP869řečtina (méně populární než CP737)
Kód Kamenickýchkódování češtiny a slovenštiny vycházející ze sady CP437

Jiné standardy

ISO/IEC 646 * ISO/IEC 6937 kódování českého a jiných evropských jazyků v DVB * EBCDIC kódování IBM, které mělo konkurovat ASCII, ale moc se neujalo * KOI: kódování bývalého sovětského bloku; 7bitové: KOI7 a 8bitová: KOI8-R, KOI8-U, KOI8-CS * ISCII indické 8bitové kódování * VISCII vietnamské kódování * Big5 * HKSCS * Guobiao * GB2312 * ISO/IEC 2022, Shift-JIS, EUC

Externí odkazy

5 min read
Share this post:
Like it 8

Leave a Comment

Please, enter your name.
Please, provide a valid email address.
Please, enter your comment.
Enjoy this post? Join Cesko.wiki
Don’t forget to share it
Top