Kódování představuje proces převodu dat z jednoho formátu do jiného. V informatice se typicky používá k převodu znaků nebo binárních dat do podoby, která je vhodná pro uložení, přenos nebo zpracování.
Kódování zajišťuje, že informace zůstává čitelná a interpretovatelná pro různé systémy a aplikace.
Hlavní důvody použití kódování:
- Přenos dat mezi systémy s různou znakovou sadou nebo technologií.
- Uložení dat ve formátu kompatibilním s daným prostředím (např. databáze, soubory).
- Zamezení ztrátě informací při přenosu nebo zpracování.
- Bezpečnost a ochrana dat (např. před vložením do HTML, kde by mohlo dojít k útokům typu XSS).
- Úspora místa (některá kódování jsou kompaktnější než jiná).
Bez správného kódování může dojít ke zkomolení textu nebo k chybám při práci s daty.
Typy kódování
Existuje více druhů kódování, každý s odlišným účelem:
- Znaková kódování – převádějí znaky na číselné hodnoty (bajty), např. UTF-8, ASCII, UTF-16.
- Binární kódování – umožňuje převod binárních dat do textové podoby (např. Base64).
- Formátová kódování – slouží k bezpečnému vložení dat do specifického prostředí (např. HTML encoding, URL encoding).
ASCII
ASCII (American Standard Code for Information Interchange) je znaková sada a zároveň kódování, která slouží k převodu znaků na číselné hodnoty (bajty) a naopak. ASCII využívá 7 bitů, což umožňuje reprezentovat 128 znaků s hodnotami 0–127. Osmý bit (v bajtu) zůstal historicky nevyužitý nebo se používal pro rozšířené znaky v různých národních kódových stránkách (např. Windows-1250).
ASCII obsah
- Řídicí znaky (0–31)
- např. znak pro nový řádek (LF – Line Feed), návrat vozíku (CR – Carriage Return), zvukový signál (BEL).
- Znak mezery (32)
- běžně používaný jako oddělovač slov.
- Tisknutelné znaky (33–126)
- velká a malá písmena anglické abecedy (A–Z, a–z)
- číslice (0–9)
- interpunkční znaky a symboly (např. !, @, #, $, %, &, *).
- Znak DEL (127)
- historicky využíván jako mazací znak.
Význam ASCII
- Je základem pro mnoho jiných znakových sad (např. UTF-8 je zpětně kompatibilní s ASCII).
- Je kompaktní – zabírá málo místa (jeden znak = 1 bajt).
UTF-8
UTF-8 je nejpoužívanější znakové kódování pro texty. Nicméně existují i další varianty jako UTF-16, UTF-32.
Vlastnosti:
- Proměnná délka znaků (1–4 bajty).
- Kompatibilní s ASCII (prvních 128 znaků).
- Úsporné pro zápis textu, který převážně obsahuje znaky latinky.
- Podporuje všechny znaky standardu Unicode.
Příklad:
- znak
A→ 1 bajt:01000001 - znak
Č→ 2 bajty:11000011 10001010
UTF-8 se využívá v souborech, webech, protokolech jako HTTP či databázích.
Base64
Base64 je metoda pro zakódování binárních dat (např. obrázků, souborů, znaků s diakritikou atd.) do textového formátu, který se skládá pouze ze znaků ASCII. Číslo 64 v názvu kódování reprezentuj, že se využívá 64 znaků z ASCII pro kódování obsahu.
Mnohé systémy (např. HTTP hlavičky, e-maily, databáze, formuláře) neumí pracovat s binárními daty, nebo je omezují. Base64 to řeší tím, že binární obsah převede na bezpečný text.
Princip fungování
- Vstup (např. text nebo soubor) se převede na binární data.
- Binární data se rozdělí na bloky po 6 bitech ().
- Každý blok se převede na znak z tabulky Base64.
Používané znaky:
A–Z → 26 znaků
a–z → 26 znaků
0–9 → 10 znaků
+ / → 2 znaky
Navíc se používá znak = pro zarovnání (padding).
Ukázka
Text: Hello, World!
Base64: SGVsbG8sIFdvcmxkIQ==
HTML encoding
HTML encoding je způsob, jakým se v HTML dokumentech nahrazují speciální znaky jejich “bezpečnými” zástupci (tzv. HTML entitami), aby se neinterpretovaly jako součást HTML kódu.
HTML obsahuje speciální znaky, které mají technický význam – např. pro značky (tagy), atributy atd.
Význam HTML kódování
- Chrání uživatele před XSS (cross-site scripting) útoky
- Zajišťuje správné zobrazení textu obsahujícího znaky jako
<,>nebo& - Umožňuje bezpečně zobrazovat kód, skripty a značky jako text
Ukázka kódování
| Znak | Význam v HTML | HTML entita |
|---|---|---|
< | začátek tagu | < |
> | konec tagu | > |
& | začátek entity | & |
" | začátek/konec atributu | " |
' | uvozovky | ' |
© | znak copyright | © nebo © |
URL encoding
Převádí znaky v URL adresách, které nejsou které nejsou povoleny nebo mají speciální význam.
URL může obsahovat pouze určitý soubor znaků (ASCII), např.:
- písmena (a–z, A–Z)
- číslice (0–9)
- některé speciální znaky:
- _ . ~
Zbytek — například mezery, diakritika, lomítka /, otazníky ?, znaky s významem — musí být zakódován, aby se nezaměnil za něco jiného.
URL Encoding se používá
- V parametrech URL (
?q=něco+zakódovaného) - Při posílání dat ve formulářích
- Při vkládání speciálních znaků do cest, názvů souborů apod.
Ukázka kódování
Pravidlo pro kódování
% + hexadecimální hodnota znaku v ASCII
| Znak | ASCII kód | URL encoded |
|---|---|---|
| (mezera) | 32 | %20 nebo + (v query stringu) |
/ | 47 | %2F |
? | 63 | %3F |
á | (UTF-8: C3 A1) | %C3%A1 |