Karakterkódolás
Napjainkban a betüket, számokat egyre inkább szeretnénk saját nyelvünkön, ékezetesen látni. Sőt az utóbbi évtizedben az is igényként merült fel, hogy egyazon szöveges állomány több nyelv betűit is tartalmazhassa. Ezért érdekes kérdés a karakterkódolások összehasonlítása.
Az ugyanazon szövegben bármely nyelv alkalmazására csak a Unicode illetve az azt kódoló UTF-8 alapú rendszerek képesek.
Tartalomjegyzék
ASCII karakterek
Az ASCII az American Standard Code for Information Interchange (Amerikai szabvány kód az információcseréhez) talán a leg ismertebb karakter kódolás, a mai számítástechnikának az alapja.
Jellemzői:
- Első negyede terminál vezérlő karakterekből áll. Lásd bekeretezett részt. Ilyen például a TAB (tabulátor) vagy CR (kocsivissza) és LF (újsor). Érdekes, hogy a Microsoft cég a sorvéget CRLF-el jelölte, a Unixok esetén az LF, mint sor vége terjedt el. Terminál esetén az ENTER gomb CR jelet küld.
- 16-os számrendszerben szisztematikus felépítésű
- Kisbetű, számok, minimalizált - írógépes világból származó - írásjelek.
- Csak angol nyelvterület igényeit elégíti ki.
A kiterjesztett karakterkészlet a 8 bites számítástechnika kínálta 1 bitnyi lehetőség kihasználása volt. Segítségével az adott nyelv karakterei ábrázolhatóvá váltak. Később minden nyelv saját kódlapot alakított ki. Ilyen volt magyar nyelvre a CP852.
Az ábrán az alapértelmezett amerikai kibővített karakterkészlet látható.
ISO-8859-x család
A következő komoly mérföldkő az ISO-8859-x karakter kódolás család, amelyben szabványosították a 128-255 közé eső karaktereket. Első körben Nyugat-Európára, majd rá kellett döbbenni, hogy a kelet-közép-európai tagállamoknak vannak még érdekes karakterei.
Így az ISO-8859 karakterkészlet alvariánsokra szakadt. Magyar nyelvre az ISO-8859-2 alvariáns felel meg.
Unicode és az UTF-8
A Unicode az ASCII 7 bites, illetve az ISO-8859-x adott nyelvre adoptált újabb 128 karaktere helyett 16 biten ábrázolja a karakterkészletet. Ez azt jelenti, hogy az ASCII 128 (0..127) karaktere további 65408 betűvel lett kiegészítve.
A unicode karakterek a karakter képével együtt a http://www.unicode.org/charts/ oldalon található meg.
Az UTF-8 kódolás
Kepzeljük el azt az esetet, hogy 8-nál több bitet szeretnénk átvinni, azonban nem szeretnénk okvetlen 16 bites számot felhasználni. Ezt megtehetjük úgy is, hogy egy 8 bites szám felső 1-es bitjeinek száma a legelső 0-ig azt mutatja, hogy van még utána az egyesek számának megfelelő byte, ami ugyanennek a sok bites értéknek a bitjeit adja.
Alább az x-ek jelzik az összerakható biteket, a többi a fix értékű biteket. Ezek szerint:
Byte-ok száma: | 7 byte | 6 byte | 5 byte | 4 byte | 3 byte | 2 byte | 1 byte |
Bitenkénti kinézete: | 1111 110x | 1111 10xx | 1111 0xxx | 1110 xxxx | 110x xxxx | 10xx xxxx | 0xxx xxxx |
Ennyi bit többletet ad: | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
Összes hasznos bit: | 28 | 27 | 25 | 22 | 18 | 13 | 7 |
A gyakorlatban a 16 bites Unicodot választották a karakter elrendezés alapjának, amely 65536 különböző karakter megjelenítésére képes az ASCII szabvanyos 128 (0...0x7F) illetve az ISO8859-2 256 karakterével szemben.
Ez azt is jelenti, hogy a 7 bites (0..0x7F) ASCII átviteléhez továbbra is elegendő az 1 byte-os 0xxx xxxx forma. Ez alapvető tervezési szempont volt. Azonban ha 127 feletti értéket szeretnénk átvinni, pontosabban a 128 és 8191 (0x80..0x1FFF) közöttit, akkor ezt 2 byte felhasználásával tudjuk megtenni.
Ugyanis ekkor az információ az alábbiak szerint helyezkedik el:
Felső byte | Alsó byte |
---|---|
10xx xxxx | 0xxx xxxx |
A fenti ábrában az x-ek a hasznos bitek.
8192-65535-ig (0x1FFF-0xFFFF) pedig 3 byte-ba kódolt karakterek következnek. Érdekességképp ilyen 3 byte-os a magyar also 99 ( „ ) és a felso 99 ( ” ) alakú idezőjel is. A Unicode táblában a 8222 illetve 8221 számértéket viseli. Mindeközben a számítástechnikai macskaköröm ( " ) mindössze 1 byte-os, mert az eredeti ASCII kódkészlet tartozéka.