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í

  1. Vstup (např. text nebo soubor) se převede na binární data.
  2. Binární data se rozdělí na bloky po 6 bitech ().
  3. 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í

ZnakVýznam v HTMLHTML entita
<začátek tagu&lt;
>konec tagu&gt;
&začátek entity&amp;
"začátek/­konec atributu&quot;
'uvozovky&apos;
©znak copyright&copy; nebo &#169;

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

ZnakASCII kódURL encoded
(mezera)32%20 nebo + (v query stringu)
/47%2F
?63%3F
á(UTF-8: C3 A1)%C3%A1