130 likes | 251 Views
Aplikační a programové vybavení. Znakové sady. Základní pojmy. Znak – symbol Kódování ≈ znaková sada = kódová stránka ( encoding ≈ character set ( charset ) = code page ) Je systém přiřazování číselných kódů znakům. Je reprezentováno tabulkou (mapování).
E N D
Aplikační a programové vybavení Znakové sady
Základní pojmy • Znak – symbol • Kódování ≈znaková sada = kódová stránka (encoding≈character set (charset) = codepage) • Je systém přiřazování číselných kódů znakům. • Je reprezentováno tabulkou (mapování). • Cílem je možnost ukládat symboly ve formě čísel. • Kódové slovo – kód přiřazený symbolu • Kódová jednotka – elementární část kódu
Jedno-bytové kódování • Délka kódu je maximálně jeden byte (single-byte) • Znaková sada ASCII (základní) • délka kódu: 7 bitů → 128 znaků • Obsahuje znaky anglické abecedy, čísla, základní interpunkční znaménka a řídící (netisknutelné) znaky (control characters) • NULL, CR, LF, TAB, ... • Rozšířená sada ASCII = „Národní znakové sady“ • délka kódu: 8 bitů → 256 znaků • Různé varianty obsahují různé specifické národní znaky. • Výhodou je snadné zpracování a rychlost. • Nevýhodou je nedostatečný rozsah sady (čínština má tisíce znaků).
Více-bytové kódování • Délka kódu je jeden a více bajtů (multi-byte) • Kódovou jednotkou je jeden byte. • Rozsah znakové sady závisí na počtu kódových jednotek. • Dvě základní varianty: • Všechny znaky jsou kódované stejným počtem bytů. • Každý znak může být kódován různým počtem bytů podle potřeby (operace s řetězci jsou náročnější).
Národní znakové sady • Základní znaková sada ASCII obsahuje pouze znaky anglické abecedy – jedno-bytové kódování. • Neobsahuje žádné znaky národních abeced. • V 80. letech vzniklo množství národních znakových sad. • Pro češtinu existují: • ISO-8859-2 (ISO Latin 2) • windows-1250 (CP1250) • CP852 (PC Latin 2) • a další: KEYBCS2 (kódování bratrů Kamenických, CP859), East8, ICL, Cork • Klíčovým problémem je nedostatek pozic pro různé národních znaky - jednotlivé znaky se překrývají.
Unicode Současně se vznikem národních kódování začala vznikat univerzální znaková sada – více-bytové kódování. Dvě iniciativy – UnicodeConsortium a ISO. V roce 1991 se již dříve kompatibilní standardy sloučily do Unicode. Všechny verze standardu Unicode vychází souběžně jako ISO standardy. Jednotlivé verze standardu jsou vzájemně kompatibilní. Poslední verze Unicode6.0 vyšla v roce 2010 http://www.unicode.org
Unicode • Znaková sada Unicode definuje několik kódování: UTF-7, UTF-8, UTF-16 a UTF-32. • Kromě kódování Unicode (UTF-n) se používají ještě starší kódování ISO: UCS-2, UCS-4. • Velikost kódové jednotky je 1, 2 nebo 4 byty. • Pokud je kódová jednotka větší jak 1 byte, tak je nutné určit pořadí bytů. • Big Endian (výchozí pořadí) nebo Little Endian • Pořadí bytů se určuje značkou BOM (Byte Order Mark) na začátku souboru/dat.
Unicode kódování • Unicode má nyní 98,884 tisknutelných znaků. • Více jak 800000 dalších pozic je volných. • Kromě toho umožňuje i definice vlastních znaků.
function utf8_strlen($str) { $count = 0; for ($i = 0; $i < strlen($str); $i++) { //pres vsechny znaky $value = ord($str[$i]); if ($value > 127) { if ($value >= 192 && $value <= 223) { $i++; } elseif ($value >= 224 && $value <= 239) { $i = $i + 2; } elseif($value >= 240 && $value <= 247) { $i = $i + 3; } else { echo ‘Not a UTF-8 compatible string ' } } $count++; } return $count; }
Unicode – shrnutí • UTF-8 řeší naprostou většinu všech problémů s kódováním. • Aplikace může pracovat s daty v libovolném jazyce. • Podpora ze strany aplikací je stále ještě špatná. • Pro reprezentaci dat uvnitř aplikace může být někdy výhodnější využít kódování s konstantním počtem bytů na jeden znak. • Příliš žluťoučký kůň pěl ďábelské ódy.