Znakové sady

Z předchozích dílů bys už měl vědět, jak počítače pracují s čísly, negativními čísly ale i desetinnými čísly. Už bys měl mít docela dobrej základ. Možná z tebe něco bude!

Pamatuješ si, jak jsem mluvil na začátku o morseovce? S elektrickou lampou můžeš něco někomu zablikat a budou si myslet, že jseš debil. Ale pokud se domluvíš na nějakém kódu, třeba na morseovce, můžeš předat nějakou informaci, třeba „NEJSEM“.

Morseovka je kód, kde kombinací signálů předáváš jednotlivá písmena. Podobný „kód“ je dohodnutý i v počítačích protože obyčejní lidé nechtějí pracovat s bity, obyčejní lidé chtějí pracovat s normálními čísly (v desítkové číselné soustavě) a s abecedou.

Potřebujeme přidat novou vrstvu, kterou bych nazval „bitová interpretace“. Je to prostě pohled na bity způsobem, kterému lidé nejvíc rozumí. Desítkovou číselnou soustavu všichni chápeme a pro komunikaci chceme psát věty, slova, písmena.

Přidaná vrstva bitové interpretace

V počítačích můžeš říct, že nějaká kombinace bitů reprezentuje konkrétní písmeno. Znaková sada je „kód“ který přiřazuje ke konkrétní bitové hodnotě konkrétní znak.

ASCII

Nejznámější a nejstarší znaková sada se jmenuje ASCII. Je důležité ji znát. Běžný počítačový uživatel na ní nejspíš nenarazí ale ajťák nejspíš dřív nebo později jo.

A i kdyby ne, stejně je důležité ji znát, protože všechny důležité znakové sady vychází právě z ASCII.

Tato znaková sada se zapisuje do 7 bitů takže se tam vejde jen 128 hodnot.

ASCII tabulka
Zdroj: http://www.asciitable.com/

Velké „A“ je číslo 65 což je v bitech 1000001, malé „a“ je 97 a podobně.

ASCII je fakt stará znaková sada (1963). Spoustu těch znaků v rozsahu 0-31 původně reprezentovala různé divné stavy, táhla, spínače, tlačítka, světýlka, pípátka a bůhví jaký divný věci, které tehdejší počítače měly.

Dnes už mají počítače hlavně USB klávesnici a myš. Klávesnice předává informace úplně jiným kódem (USB HID, strana 53) který se znakovými sadami nijak nesouvisí. Operační systém se stará o to, aby přeložil signál z klávesnice do aktivní znakové sady.

Unicode

Jak počítače začalo používat mnohem víc lidí všude po světě, začaly vznikat další jazykové sady pro mnoho různých jazyků. Samotné ASCII neumí české znaky jako „ř“ nebo „ň“, pouze anglickou abecedu.

Kdysi byl ve znakových sadách neuvěřitelný bordel, každý používal různé znakové sady. Toto období naštěstí skončilo protože všichni začali používat Unicode což je název organizace která vymyslela znaková sadu se stejným názvem, která má 32 bitový rozsah. Už víš, že 32 bitů je 232 a to je 4294967296 — 4 miliardy možných znaků!

To je víc znaků, než kolik celé lidstvo vůbec vymyslelo. Do 4 miliard se vejdou všechny abecedy světa, všechny symboly jazyků jako čínština které obsahují tisíce různých znaků, dále tam narveš i všechny možné historické znaky, různé varianty různých znaků, dokonce i fiktivní, vymyšlené abecedy…a to jseš pořád někde na čísle 100000? 200000? Pořád máš 4 miliardovej nevyužitej prostor.

A tak přišel nějakej kokot a vymyslel emoji 🤪

UTF-8

Plná znaková sada se jmenuje UTF-32. Každý znak zabírá 4 bajty, jenže většina latinkou psaného textu je už zahrnuta v ASCII, ze kterýho historicky spousta dalších znakových sad vycházela.

UTF-8 je varianta, která tohle zohledňuje. Prvních 8 bajtů odpovídá ASCII a ty další 3 bajty lze vynechat. Pokud ale potřebuji vyjádřit znak, který v ASCII není, jako například české „ř“ nebo emoji tak se využijí i zbývající 2 až 4 bajty. Díky tomu UTF-8 šetří místem a zároveň je kompatibilní s jakýmkoliv textem napsaným v ASCII.

Historické české znakové sady

Každý ajťák by si měl všude vynucovat Unicode. Bez diskuze. Unicode je totiž záruka, že zde lze použít jakýkoliv jazyk a nemusíte už řešit podporu různých znakových sad.

Jediný argument, proč používat jinou znakovou sadu je jen tehdy, pokud musíte pracovat se starým softwarem, který Unicode ještě nezná nebo jste nějakým jiným způsobem donucený použít něco jiného, než Unicode. Je teda dobré vědět, že historicky existují tyto české znakové sady, na které můžete narazit:

  • ISO-8859-2
  • Windows-1250
  • Kód Kamenických (tohle už je fakt hrozně moc stará srágora, pokud na to někde narazíte, polejte počítač benzínem a zapalte ho)

„Rozsypaný čaj“

Upřímně jsem šťastný, že už doba problémů špatných konverzí mezi různými znakovými sadami pominula. Už jen velice vzácně narážím na situace, kdy se mi český text zobrazuje ve špatné znakové sadě, než v jaké byl uložen.

Je ale dobré rozumět tomu, co se děje, když na to narazíte. Jakmile se pokusíte zobrazit nějaký text ve znakové sadě, se kterou daný text nebyl uložen, uvidíte bordel nebo „rozsypaný čaj“.

  • Žluťoučký kůň úpěl ďábelské ódy (uloženo a zobrazeno UTF-8)
  • Ĺ˝luĹĄouÄŤkĂ˝ kůň ĂşpÄ›l ďábelskĂ© Ăłdy (UTF-8 zobrazeno ve Windows-1250)
    • možná to nejde úplně poznat ale všimni si, že písmena bez diakritiky prošla. To právě díky tomu, že UTF-8 i Windows-1250 vycházejí z ASCII, kde jsou znaky anglické abecedy, které jsou stejné i v češtině.

Souhrn

  • Znaková sada je „kód“ který určuje, jak se bity překládají do konkrétních znaků
  • Nejstarší znaková sada, ze které všechny ostatní znakové sady vychází, se jmenuje ASCII.
  • Nejmodernější a všude používaná znaková sada, která obsahuje i emoji, se jmenuje Unicode a má rozsah 4 miliardy znaků, většina tohoto rozsahu je nevyužita.
  • Pro šetření dat existuje varianta UTF-8 která s ASCII znaky pracuje pouze s 8 bity. Zbylé znaky zobrazuje v rozsahu 2 až 4 bajtů.
  • Pokud text uložený v jedné znakové sadě zobrazíš v jiné znakové sadě, zobrazí se ti nesmysly.