ASCII a Unicode: co to je a k čemu slouží

Počítač rozumí jen číslům, takže každé písmeno, které vidíte na obrazovce, je kód. ASCII byla první tabulka kódů, která se stala standardem, a Unicode je ta, kterou dnes používáme k psaní v jakémkoli jazyce. Uvidíte, jak fungují, které kódy se vyplatí znát, proč se místo diakritiky někdy objeví divné symboly a jak vše vyhledat v tabulce.

Aktualizováno:

Co je kódování znaků

Kódování je dohoda: «číslo 65 znamená písmeno A». Když napíšete text, program uloží tato čísla; když ho otevře někdo jiný, jeho program je pomocí téže dohody přeloží zpět na písmena. Pokud oba nepoužívají stejnou tabulku, text se zobrazí špatně.

Je třeba oddělit dvě myšlenky. Jednou je znaková sada, seznam toho, která čísla odpovídají kterým symbolům. Druhou je způsob, jak se tato čísla ukládají do bajtů. V ASCII se obě triviálně shodují; v Unicode ne, a tady přichází ke slovu UTF-8.

ASCII: 128 sedmibitových znaků

ASCII (zkratka American Standard Code for Information Interchange) bylo standardizováno v 60. letech. Používá 7 bitů, tedy 2 na sedmou = 128 kódů, od 0 do 127. Z nich je 33 řídicích znaků (0 až 31 a 127) a 95 tisknutelných (32 až 126, včetně mezery).

Neobsahuje písmena s háčky a čárkami, ani symbol eura: bylo navrženo pro angličtinu. To vysvětluje, proč později byly potřeba další tabulky.

Kódy, se kterými se setkáte nejčastěji. Mezera (32) se počítá mezi tisknutelné, i když není vidět.
Řídicí znakDesítkověŠestnáctkověDvojkově (7 bitů)K čemu slouží
Nulový znak (NUL)0000000000V některých jazycích označuje konec řetězce
Vodorovný tabulátor (TAB)9090001001Skočí na další zarážku tabulátoru
Nový řádek (LF)100A0001010Posune se na další řádek
Návrat vozíku (CR)130D0001101Vrátí se na začátek řádku
Escape (ESC)271B0011011Zahajuje řídicí sekvence
Mezera32200100000První tisknutelný znak
Smazat (DEL)1277F1111111Vymaže znak

Vztahy, které se vyplatí pamatovat

Tabulka není seřazena náhodně. S několika pravidelnostmi můžete kódy číst zpaměti.

Konec řádku: LF, CR a CRLF

Konec řádku vypadá jako jednoduchá věc, ale píše se podle systému různě. Unix, Linux a macOS používají jediný znak, LF (10). Windows používá dva po sobě, CR a LF (13 a 10), známé jako CRLF. Staré dálnopisy potřebovaly dva různé příkazy: vrátit vozík na začátek a posunout papír o řádek.

Tento rozdíl je příčinou souborů, které se v základním editoru zobrazí celé na jednom řádku, nebo s podivným symbolem na konci každého řádku. Chcete-li zjistit, jaký kód má který z nich, napište LF nebo CR do vyhledávání v ASCII tabulce.

«Rozšířené ASCII» není standard

Protože bajt má 8 bitů a ASCII využívá jen 7, zbývalo 128 volných kódů (128 až 255) a každý výrobce a region je zaplnil po svém. Říká se tomu «rozšířené ASCII», ale neexistuje jedna jediná tabulka: je jich mnoho, nazývají se kódové stránky. Dvě z nejznámějších jsou Latin-1 (ISO-8859-1), kde é má kód 233, a Windows-1252, podobná, ale s rozdíly v kódech 128 až 159 (tam je například euro). U češtiny se používaly především ISO-8859-2 a Windows-1250.

Problém je, že kód 233 znamená «é» v jedné tabulce a něco jiného v jiné. Text zapsaný jednou tabulkou a čtený jinou ukazoval změť znaků. Unicode vznikl, aby tomuto nepořádku udělal přítrž.

Unicode a UTF-8

Unicode přiřazuje jedinečné číslo, zvané kódový bod, každému znaku téměř všech světových písem, plus symbolům a emoji. Dnes má více než 150 000 znaků. Zapisuje se s předponou U+ a šestnáctkově: «A» je U+0041, «ñ» je U+00F1, euro je U+20AC a emoji usměvavého obličeje je U+1F600. Prvních 128 kódových bodů je přesně těch z ASCII.

UTF-8 je nejpoužívanější způsob, jak tato čísla ukládat do bajtů, a používá 1 až 4 podle znaku. Těch 128 znaků ASCII zabírá jediný bajt shodný s tím dřívějším, takže ASCII text je zároveň platný text UTF-8. Zbytek zabírá víc bajtů.

Čím dál od ASCII, tím víc bajtů znak zabírá.
ZnakKódový bodBajty v UTF-8Bajty (šestnáctkově)
AU+0041141
éU+00E92C3 A9
ñU+00F12C3 B1
€U+20AC3E2 82 AC
😀U+1F6004F0 9F 98 80

Proč se místo «ñ» objeví «Ã±»

Je to nejčastější chyba a má přesné vysvětlení. Znak ñ jsou v UTF-8 dva bajty: C3 a B1. Pokud si program myslí, že je text v Latin-1, přečte každý bajt jako jeden znak: C3 je «Ã» a B1 je «±». Výsledek: «Ã±». Totéž se stane s «é», které vypadá jako «Ã©», a se slovem «canción», které se zobrazí jako «canción». U češtiny se podobně místo «ě» objeví «Ä›».

Řešení je téměř vždy říct programu, aby soubor otevřel jako UTF-8 (v textovém editoru nebo v nastavení importu tabulkového procesoru). Když nastane opak, text v Latin-1 čtený jako UTF-8, objeví se obvykle kosočtverce s otazníkem, protože tyto osamocené bajty netvoří platné sekvence UTF-8.

Jak používat ASCII tabulku a převodník

Nástroj «ASCII tabulka» zobrazuje 128 znaků s jejich kódem v desítkové, šestnáctkové, osmičkové a dvojkové soustavě a názvem řídicích znaků.

  1. Napište do vyhledávání znak, kód nebo název řídicího znaku (například A, 65, 41 nebo LF) a najdete jeho řádek.
  2. Pomocí filtrovacích tlačítek (Řídicí, Číslice, Velká písmena, Malá písmena, Znaky) zobrazíte jen jednu skupinu.
  3. Pro převod napište text do pole «Text» a vyberte formát (desítkový, šestnáctkový, osmičkový nebo binární): níže se objeví kódy. «Hola» dá 72 111 108 97 desítkově a 48 6F 6C 61 šestnáctkově.
  4. Můžete to udělat i obráceně: vložte kódy oddělené mezerami nebo čárkami do pole «Kódy» a vytvoří se text. V šestnáctkové soustavě se přijímají předpony jako 0x41.

Pokud text obsahuje znaky, které nejsou ASCII, například ñ, nástroj na to upozorní a zobrazí jeho kód Unicode. Skutečné bajty v UTF-8 uvidíte v nástroji «Text na binární kód»: ñ dá 11000011 10110001, dva bajty o 8 bitech. Omezení: tabulka zobrazuje jen standardní ASCII, ne rozšířené, a vše se počítá ve vašem prohlížeči, bez odesílání textu na jakýkoli server.

Často kladené otázky

Kolik znaků má ASCII?

128, s kódy od 0 do 127 a 7 bity každý. Z nich je 33 řídicích a 95 tisknutelných, včetně mezery.

Jaký je ASCII kód písmene A a písmene a?

«A» je 65 (41 šestnáctkově, 01000001 dvojkově) a «a» je 97 (61 šestnáctkově, 01100001 dvojkově). Vždy se liší o 32.

Jaký je rozdíl mezi ASCII a Unicode?

ASCII má 128 znaků určených pro angličtinu. Unicode jich má více než 150 000, z téměř všech jazyků a emoji, a jeho prvních 128 je stejných jako v ASCII.

Co je UTF-8?

Je to nejpoužívanější způsob ukládání textu Unicode do bajtů. Používá 1 až 4 bajty na znak: znaky ASCII zabírají jeden, ñ dva a emoji čtyři.

Proč se v mém textu zobrazuje «Ã±» nebo «Ã©»?

Protože se text uložený v UTF-8 čte jako Latin-1. Otevřete soubor s uvedením kódování UTF-8 a problém zmizí.