Počítač rozumie iba číslam — konkrétne nulám a jednotkám. Ale ako potom zobrazí text? Odpoveďou je kódovanie znakov — systém, ktorý každému písmenu, číslici a symbolu pridelí jedinečné číslo.
Čo je ASCII?
ASCII (American Standard Code for Information Interchange — Americký štandardný kód pre výmenu informácií) je jeden z najstarších a najrozšírenejších kódovacích systémov. Bol vytvorený v 60. rokoch 20. storočia a dodnes sa používa ako základ moderných kódovaní.
ASCII priraďuje číslam od 0 do 127 konkrétne znaky:
| ASCII kód | Znak | Popis |
|---|---|---|
| 65 | A | Veľké písmeno A |
| 66 | B | Veľké písmeno B |
| 97 | a | Malé písmeno a |
| 48 | 0 | Číslica 0 |
| 32 | (medzera) | Medzera |
| 33 | ! | Výkričník |
Veľké písmená A–Z majú kódy 65–90, malé písmená a–z majú kódy 97–122. Rozdiel medzi veľkým a malým písmenom je presne 32. Preto sa dá veľkosť písma zmeniť jednoduchým binárnym operátorom.
Ako sa text ukladá v pamäti
Každý znak sa uloží ako jeden bajt (8 bitov). Slovo „HI" je teda uložené ako:
- 'H' = 72 =
01001000 - 'I' = 73 =
01001001
Súbor s textom „Ahoj" zaberá 4 bajty (4 znaky × 1 bajt).
# Zistenie ASCII kódu znaku
znak = 'A'
print(f"ASCII kód '{znak}': {ord(znak)}") # 65
# Zo kódu späť na znak
kod = 97
print(f"Znak s kódom {kod}: {chr(kod)}") # a
# Výpis ASCII kódov pre celé slovo
slovo = "Ahoj"
for pismeno in slovo:
print(f"'{pismeno}' = {ord(pismeno)}")
Obmedzenia ASCII a vznik Unicode
ASCII obsahuje iba 128 znakov — stačí to pre anglický text, ale nie pre slovenčinu (á, č, š, ž...), čínske znaky, arabské písmo alebo emoji.
Preto bol vytvorený štandard Unicode, ktorý obsahuje viac ako 140 000 znakov zo všetkých jazykov sveta.
Najrozšírenejší spôsob ukladania Unicode je UTF-8:
- Anglické znaky zaberajú stále 1 bajt (spätnú kompatibilitu s ASCII).
- Znaky s diakritikou (á, ě, ü) zaberajú 2 bajty.
- Čínske/japonské znaky zaberajú 3 bajty.
- Emoji zaberajú 4 bajty.
UTF-8 je dnes štandardom na webe — používa ho viac ako 97 % všetkých webových stránok. Keď otváraš HTML súbor, v hlavičke uvidíš <meta charset="UTF-8">.
Ak sa súbor uloží v jednom kódovaní (napr. Windows-1250) a otvorí v inom (napr. UTF-8), znaky s diakritikou sa zobrazia nesprávne — objavujú sa podivné znaky ako „Ä ahoj". Tomuto problému sa hovorí mojibake.
Príklad: Kódovanie textu
Veta „Čau!" sa v UTF-8 uloží takto:
- Č = 2 bajty (
0xC4 0x8C) - a = 1 bajt (
0x61) - u = 1 bajt (
0x75) - ! = 1 bajt (
0x21)
Spolu: 5 bajtov (nie 4, lebo „Č" zaberá 2 bajty v UTF-8).
Cvičné príklady
Aký je ASCII kód písmena 'M'? Pomôcka: 'A' má kód 65.
Zobraziť odpoveď
Prečo ASCII nestačí na zobrazenie slovenských znakov ako 'š' alebo 'č'?