PSK2-19

Název školy: Vyšší odborná škola a Střední průmyslová škola, Božetěchova 3
Autor: Ing. Marek Nožka
Anotace: Kódování textu, znakové sady
Vzdělávací oblast: Informační a komunikační technologie
Předmět: Počítačové sítě a komunikační technika (PSK)
Tematická oblast: Vrstvy protokolu TCP/IP
Výsledky vzdělávání: Žák vysvětluje kódování textu a národních znaků
Klíčová slova: ASCII, UTF-8, Unicode, národní znaková sada
Druh učebního materiálu: Video-prezentace, Online vzdělávací materiál
Typ vzdělávání: Střední vzdělávání, 3. ročník, technické lyceum
Ověřeno: VOŠ a SPŠE Olomouc; Třída: 3L
Zdroj: Vlastní poznámky, Wikipedia, Wikimedia Commons

Kódování textu

Text se v počítači kóduje pomocí tzv. znakové sady. Ta přiřazuje každému znaku určité číslo. Je to proto, že počítače dokáži pracovat pouze s čísly. Situace by se dala přirovnat k Morseově abecedě, jen s tím rozdílem, že zde nekódujeme pomocí teček a čárek, ale pomocí jedniček a nul.

ASCII

(ASCII je anglická zkratka pro American Standard Code for Information Interchange -- „americký standardní kód pro výměnu informací“).

Jedná se o znakovou znakovou zadu, která definuje znaky anglické abecedy, a jiné znaky používané v informatice. Jde o historicky nejúspěšnější znakovou sadu, z které vychází většina současných standardů pro kódování textu přinejmenším v euro-americké zóně.

V této znakové sadě odpovídá každý znak 7 respektive 8 bitům -- jednomu bajtu. To je velice výhodné pro programy, které s textem pracují.

ASCII tabulka

Znaky a jejich číselné vyjádření je zapsáno v tzv. ASCII tabulce. Ta obsahuje

Konec řádku

Za zmínku stojí, že v různých operačních systémech se implementuje znak konce řádku různě:

Národní znakové sady

Kód ASCII je podle původní definice sedmibitový (osmí bit byl původně paritní), obsahuje tedy 128 platných znaků. Jsou to ale pouze znaky anglické abecedy. Pro potřeby dalších jazyků a pro rozšíření znakové sady se používají osmibitová rozšíření ASCII kódu, která obsahují dalších 128 znaků.

Takto rozšířený kód je přesto příliš malý na to, aby pojmul třeba jen evropské národní abecedy. Pro potřeby jednotlivých jazyků byly vytvořeny různé kódové tabulky, význam kódů nad 127 není tedy jednoznačný. Záleží na konkrétní národní znakové sadě. Takto vznikly rozdílné znakové sady například pro střední Evropu nebo pro Baltské jazyky.

V našem národním prostředí se nejvíce používá znaková sada ISO 8859-2 standardizovaná mezinárodní organizací pro normalizaci ISO nebo Windows-1250 (cp1250).

Unicode

Národní znakové sady ale nedostačují pokud chceme psát textový dokument a použít znaky z více jazyků. Pokud například chceme v českém textu použít znaky řecké abecedy je to ve znakové sadě ISO 8859-2 nebo cp1250 nemožné, protože tyto znakové sady obsahují znaky pro češtinu, slovenštinu, němčinu... ale neobsahují znaky pro řečtinu.

Unicode je tabulka znaků všech existujících abeced, která v současnosti obsahuje více než 110 000 znaků. Unicode umožňuje pracovat se znaky všech písem i různými jinými symboly stejným způsobem, takže mohou být využívány současně.

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.

Původní návrh počítal s tím, že každý znak bude kódován 16-bitově, následně se ale ukázalo, že pro pokrytí všech používaných abeced to nestačí. V současné době, Tabulka Unicode poskytuje prostor pro 1.114.112 znaků s kódy $0_{HEX}$ až $10FFFF_{HEX}$. Tento prostor se dělí na 17 částí, každý o velikosti $2^{16}$.

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-8

V UTF-8 se znaky kódují různě dlouhou (1–6 bajty) posloupností bajtů podle jejich pozice v Unicode. Znaky ASCII (U+0000 -– U+007F) jsou kódovány jedním bajtem, identicky jako v ASCII tím je dosaženo zpětné kompatibility s 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ří např znak Euro, €, U+20AC jsou kódovány třemi bajty, znaky mimo BMP jsou kódovány čtyřmi bajty.

Znaky, pro které by se použilo pětibajtové a šestibajtové kódování zatím nebyly definovány.

UTF-8 se často se 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ů.

Způsob kódování znaků

U+00000000 - U+0000007F 0xxxxxxx
U+00000080 - U+000007FF 110xxxxx 10xxxxxx
U+00000800 - U+0000FFFF 1110xxxx 10xxxxxx 10xxxxxx
U+00010000 - U+001FFFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
U+00200000 - U+03FFFFFF 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
U+04000000 - U+7FFFFFFF 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx