ASCII a Unicode: čo to je a na čo slúži

Počítač rozumie iba číslam, takže každé písmeno, ktoré vidíte na obrazovke, je kód. ASCII bola prvá tabuľka kódov, ktorá sa stala štandardom, a Unicode je tá, ktorú dnes používame na písanie v ľubovoľnom jazyku. Tu uvidíte, ako fungujú, ktoré kódy sa oplatí poznať, prečo sa niekedy namiesto diakritiky zobrazujú čudné symboly a ako všetko vyhľadať v tabuľke.

Aktualizované:

Čo je kódovanie znakov

Kódovanie je dohoda: «číslo 65 znamená písmeno A». Keď píšete text, program ukladá tieto čísla; keď ho otvorí iná osoba, jej program ich prekladá späť na písmená podľa tej istej dohody. Ak obaja nepoužívajú rovnakú tabuľku, text vyjde zle.

Treba rozlišovať dve myšlienky. Jedna je znaková sada, zoznam toho, ktoré čísla zodpovedajú ktorým symbolom. Druhá je spôsob, ako sa tieto čísla ukladajú do bajtov. V ASCII sa obe zhodujú triviálnym spôsobom; v Unicode nie, a tu vstupuje UTF-8.

ASCII: 128 znakov po 7 bitoch

ASCII (skratka z American Standard Code for Information Interchange) sa štandardizovalo v 60. rokoch 20. storočia. Používa 7 bitov, teda 2 na 7 = 128 kódov od 0 do 127. Z nich je 33 riadiacich znakov (0 až 31 a 127) a 95 tlačiteľných (32 až 126, vrátane medzery).

Neobsahuje písmená s diakritikou, ani ň, ani symbol eura: navrhlo sa pre angličtinu. To vysvetľuje, prečo neskôr boli potrebné iné tabuľky.

Kódy, s ktorými sa stretnete najčastejšie. Medzera (32) sa počíta medzi tlačiteľné, hoci nie je vidieť.
Riadiaci znakDesiatkovoŠestnástkovoDvojkovo (7 bitov)Na čo slúži
Nulový znak (NUL)0000000000V mnohých jazykoch označuje koniec reťazca
Vodorovný tabulátor (TAB)9090001001Preskočí na ďalší tabulátor
Nový riadok (LF)100A0001010Posunie na nasledujúci riadok
Návrat vozíka (CR)130D0001101Vráti sa na začiatok riadka
Escape (ESC)271B0011011Začína riadiace sekvencie
Medzera32200100000Prvý tlačiteľný znak
Vymazanie (DEL)1277F1111111Vymaže znak

Vzťahy, ktoré sa oplatí zapamätať

Tabuľka nie je usporiadaná náhodne. S niekoľkými pravidelnosťami viete čítať kódy spamäti.

Koniec riadka: LF, CR a CRLF

Koniec riadka vyzerá ako jednoduchá vec, ale zapisuje sa rôzne podľa systému. Unix, Linux a macOS používajú jediný znak, LF (10). Windows používa dva po sebe, CR a LF (13 a 10), známe ako CRLF. Staré diaľnopisy potrebovali dva rôzne príkazy: vrátiť vozík na začiatok a posunúť papier o riadok.

Tento rozdiel je príčinou súborov, ktoré sa v základnom editore zobrazujú celé na jednom riadku, alebo s podivným symbolom na konci každého riadka. Ak hľadáte, aký kód ktorý má, napíšte LF alebo CR do vyhľadávača v ASCII tabuľke.

«Rozšírené ASCII» nie je štandard

Keďže bajt má 8 bitov a ASCII používa len 7, zostalo 128 voľných kódov (od 128 do 255) a každý výrobca a región ich vyplnil po svojom. Toto sa označuje ako «rozšírené ASCII», ale neexistuje jediná tabuľka: je ich veľa, nazývajú sa kódové stránky. Dve z najznámejších sú Latin-1 (ISO-8859-1), kde é je kód 233, a Windows-1252, podobná, ale s rozdielmi v kódoch 128 až 159 (je tam napríklad euro).

Problém je, že kód 233 znamená «é» v jednej tabuľke a niečo iné v druhej. Text napísaný jednou tabuľkou a prečítaný druhou zobrazil nezmysly. Unicode vznikol, aby tento neporiadok ukončil.

Unicode a UTF-8

Unicode priraďuje jedinečné číslo, nazývané kódový bod, každému znaku takmer všetkých písiem sveta, k tomu symboly a emoji. Dnes má viac než 150 000 znakov. Zapisuje sa s predponou U+ a šestnástkovo: «A» je U+0041, «ñ» je U+00F1, euro je U+20AC a emoji usmiatej tváre je U+1F600. Prvých 128 kódových bodov je presne tých z ASCII.

UTF-8 je najpoužívanejší spôsob ukladania týchto čísel do bajtov a podľa znaku používa 1 až 4. Tých 128 z ASCII zaberá jediný bajt identický ako vždy, takže ASCII text je zároveň platný UTF-8 text. Zvyšok zaberá viac bajtov.

Čím ďalej od ASCII, tým viac bajtov znak zaberá.
ZnakKódový bodBajty v UTF-8Bajty (šestnástkovo)
AU+0041141
éU+00E92C3 A9
ñU+00F12C3 B1
€U+20AC3E2 82 AC
😀U+1F6004F0 9F 98 80

Prečo sa namiesto «ñ» objaví «Ã±»

Je to najčastejšia chyba a má presné vysvetlenie. Znak ñ v UTF-8 sú dva bajty: C3 a B1. Ak si program myslí, že text je v Latin-1, číta každý bajt ako znak: C3 je «Ã» a B1 je «±». Výsledok: «Ã±». To isté sa stane s «é», ktoré sa zobrazí ako «Ã©», a so slovom «canción», ktoré sa objaví ako «canción».

Riešenie je takmer vždy povedať programu, aby súbor otvoril ako UTF-8 (v textovom editore alebo v nastavení importu tabuľkového procesora). Keď nastane opak, text v Latin-1 prečítaný ako UTF-8, zvyknú sa objaviť kosoštvorce s otáznikom, pretože tieto osamotené bajty netvoria platné sekvencie UTF-8.

Ako používať ASCII tabuľku a prevodník

Nástroj «ASCII tabuľka» zobrazuje 128 znakov s kódom desiatkovo, šestnástkovo, osmičkovo a dvojkovo a s názvom riadiacich.

  1. Do vyhľadávania napíšte znak, kód alebo názov riadiaceho znaku (napríklad A, 65, 41 alebo LF) a nájdite jeho riadok.
  2. Pomocou tlačidiel filtra (Riadiace, Číslice, Veľké písmená, Malé písmená, Znaky) zobrazte len jednu skupinu.
  3. Na prevod napíšte text do «Text» a vyberte formát (desiatkový, šestnástkový, osmičkový alebo dvojkový): dole sa zobrazia kódy. «Hola» dá 72 111 108 97 desiatkovo a 48 6F 6C 61 šestnástkovo.
  4. Môžete to urobiť aj opačne: vložte kódy oddelené medzerami alebo čiarkami do «Kódy» a vytvorí sa text. Pri šestnástkovom zápise sa prijímajú aj predpony ako 0x41.

Ak text obsahuje znaky mimo ASCII, napríklad ñ, nástroj to oznámi a zobrazí ich kód Unicode. Na zobrazenie skutočných bajtov v UTF-8 použite «Text do binárneho kódu»: ñ dá 11000011 10110001, dva 8-bitové bajty. Limity: tabuľka zobrazuje iba štandardné ASCII, nie rozšírené, a všetko sa počíta vo vašom prehliadači bez odosielania textu na server.

Často kladené otázky

Koľko znakov má ASCII?

128, s kódmi od 0 do 127 a 7 bitmi každý. Z nich je 33 riadiacich a 95 tlačiteľných, vrátane medzery.

Aký je ASCII kód písmena A a a?

«A» je 65 (41 šestnástkovo, 01000001 dvojkovo) a «a» je 97 (61 šestnástkovo, 01100001 dvojkovo). Vždy sa líšia o 32.

Aký je rozdiel medzi ASCII a Unicode?

ASCII má 128 znakov navrhnutých pre angličtinu. Unicode má viac než 150 000 znakov takmer všetkých jazykov a emoji a jeho prvých 128 je rovnakých ako v ASCII.

Čo je UTF-8?

Je to najpoužívanejší spôsob ukladania textu Unicode do bajtov. Používa 1 až 4 bajty na znak: znaky ASCII zaberajú jeden, ñ dva a emoji štyri.

Prečo môj text zobrazuje «Ã±» alebo «Ã©»?

Pretože text uložený v UTF-8 sa číta ako Latin-1. Otvorte súbor so zadaným kódovaním UTF-8 a opraví sa to.