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í). 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ů).
Tabulka znakové sady Win-1250
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 – Unicode Consortium 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 Unicode 6.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í UTF-8 UTF-16 UTF-32 UCS-2 UCS-4 Min. počet bytů 1 2 4 Max. počet bytů Velikost kódové jednotky 8 bitů 16 bitů 32 bitů 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ů.
Unicode kódování – srovnání UTF-8 UTF-16 UTF-32 UCS-2 UCS-4 Všechny znaky ano ne Proměnná délka znaku Režie malá střední velká Kompatibilní s ASCII Závisí na pořadí bytů Doporučeno k používání
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.
http://kantorek.webzdarma.cz/