Karakterkódolás
Napjainkban a betüket, számokat egyre inkább saját nyelvünkön, ékezetesen írva akarjuk 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. Ezért globalizálódó világunkban a jövő az UTF-8 kódolással átvitt Unicode karakterkészleté.
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.
Kódolás | Nyelvi környezet |
cp437 | USA, Kanada |
cp737 | Görög |
cp775 | Baltic Rim |
cp850 | Európa (nyugat) |
cp852 | Közép/Kelet-Európa |
cp855 | Cirill |
cp857 | Török |
cp860 | Portugál |
cp861 | Izland |
cp862 | Héber |
cp863 | Kanadai francia |
cp864 | Arab |
cp865 | Norvég, dán |
cp866 | Cirill/orosz |
cp869 | Görög |
cp936 | Egyszerűsített kínai |
cp949 | Kóreai |
cp874 | Thai |
cp1255 | Héber |
Windows CP1250 | Szláv/közép-európai nyelvekre |
Windows CP1251 | Bolgár, belorusz |
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.
Kódolás | Megjegyzés | |
ISO 8859-1 | Latin 1 | Nyugat-Európa |
ISO 8859-2 | Latin 2 | Szláv/Közép-Európa |
ISO 8859-3 | Latin 3 | Eszperantó, Galician, máltai, török |
ISO 8859-4 | Latin 4 | old Baltic |
ISO 8859-5 | Cyrill | |
ISO 8859-6 | Arab | |
ISO 8859-7 | Modern görög | |
ISO 8859-8 | Héber | |
ISO 8859-9 | Latin 5 | török |
ISO 8859-13 | Latin 7 | Baltic |
ISO 8859-14 | Latin 8 | Celtic |
ISO 8859-15 | Latin 9 | Nyugat-európai az Euro szimbólummal |
Unicode és az UTF-8
Az internet előretörésével egyre erősebb lett arra az igény, hogy a fenti sok-sok karakterkódolás helyett egyetlen univerzális karakterkódolást alkalmazzanak. Az előző szavak angol megfelelőjéből képzett mozaikszóvan, unicode-nak nevezték el. Az unicode múltja 1987-re tekint vissza, és 1992 júniusában jelent meg az 1.0-ás verziója.
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. Így lehetővé vált a különböző nyelvek karaktereinek egyetlen szöveges állományban való vegyes továbbítására.
A unicode karakterek a karakter képével együtt a http://www.unicode.org/charts/ oldalon található meg.
Hátránya, hogy 2 byte-ot használ fel egyetlen karakter ábrázolására, ami miatt egy újabb trükkel való ötvözése kellett az elterjedéséhez.
Megjegyzés: HTML szövegformázó nyelvben például karakterkódolástól függetlenül az &#SZÁM; szintaktikával tetszóleges Unicode karakter beilleszthető.
Az UTF-8 kódolás
Az UTF-8 története 1992 szeptemberére nyúlik vissza. Ekkor lett először alkalmazva a Plan 9 operációs rendszerben, majd 1993 januárjában lett szélesebb körben ismertetve.
Az UTF-8 a 8-bit Unicode Transformation Format (8 bites Unicode átalakítási formátum). Feladata, hogy az előzőekben ismertetett 16 bites Unicode karakterkészletet változó hosszúságban átvigye, azaz csak akkor használjon több byte-os kódot, ha olyan karaktert kívánunk átvinni, amely az ASCII kódtáblában nem szerepel.
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: | Felső | Középső | Alsó |
Bitenkénti kinézete: | 110x xxxx | 10xx xxxx | 0xxx xxxx |
Ennyi bit többletet ad: | 5 | 6 | 7 |
Összes hasznos bit: | 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.
Ne felejtsük el, hogy a statisztika szerint a legtöbbet az angol ABC betűit használjuk, és csak sokkal ritkábban használjuk a több byte-ot foglaló ékezeteket illetve speciális karaktereket. Ezáltal végeredményként byte-okat spórolunk meg az átvitt illetve tárolt szövegben, miközben bármely nyelv karakterkészletéből lehetőségünk nyílik karaktert beilleszteni a szövegbe.
Az UTF-8 felhasználása
Az UTF-8 előnyös tulajdonsága miatt a jövőben várhatólag mindenhol UTF-8 kódolással fogunk találkozni. Ezáltal a klasszikus TXT fájl is UTF-8 alapú lesz, a fájlnevek is UTF-8 alapon lesznek kódolva, továbbá a terminálkapcsolatok esetén is az UTF-8 karakterkódolás fogja biztosítani, hogy bármely nyelvű szimbólum átvihető, megjeleníthető legyen.
Napjainkban a Unix rendszerek egyre inkább UTF-8 kódolásra térnek át, a Microsoft Windows-XP -től felfelé is az UTF-8 előretörése figyelhető meg. Ezért gyakorlatilag ISO-8859-2 -ben már hosszabb távon nem érdemes gondolkodni.
Karakterkódolások közötti konverzió
ISO-8859-2 -es terminálon UTF-8 karakterek (és fordítva) az ékezetes karakterek helyett ákom-bákom jelenik meg. A POSIX rendszereknél (Linux, BSD, Solaris, stb.) az iconv nevű programmal konvertálhatunk a leg egyszerűbben. Egy példa állománynevek ISO-8859-2 -ről UTF-8-ba konvertálásra:
<HIGHLIGHTSYNTAX language="bash">for i in *.txt; do mv $i `echo "$i" | iconv -f iso8859-2 -t utf-8` done</HIGHLIGHTSYNTAX>
POSIX rendszerek esetén a terminál átkapcsolása UTF-8 kódolásról például ISO8859-2-re: LC_CTYPE környezeti változó értékét változtassuk át hu_HU.utf8 -ról hu_HU-ra. Például xterm indításához:
<HIGHLIGHTSYNTAX language="bash">LC_CTYPE=hu_HU xterm</HIGHLIGHTSYNTAX>
És az így elindított xterm ISO8859-2 karakterkódolással és annak korlátaival fog rendelkezni, ezáltal a visszafelé kompatibilis biztosítható, amely a régi vagy Windows alól szerkesztett szövegállományokhoz jöhet jól, amit még onnan is akarnak olvasni.
Magyar ékezetes betűk
Kezdetben nem vala ékezet (7bites). Nem számított kiabálásnak a csupa NAGYBETU használata, hiszen nem voltak kisbetűk, vagy alig használták.
Próbálkoztak a TAAVIRATOZAASBAN elterjedt kódolással.
Jobban olvasható a REPU:LO" E'KEZETES (aposztrófos) írás.
Az operációs rendszer, perifériák (billentyűzet, monitor, nyomtató) nem voltak felkészítve az ékezetes betűk kezelésére. Amelyik alkalmazói program próbálkozott valamilyen megoldással az egyedi volt. Szinte minden számítógépre készült ékezetes szövegszerkesztő ZX Spectrum-tól IBM PC-ig.
A 437-es kódlap kiterjesztésével készült a CWI még az 1990-es évek elején, jelentős sikerrel.
A megjelenítő adapter vagy nyomtató karaktergenerátor eredeti EPROM-ján alig kellett változtatni; a kódlap cseréhez eleddig csavarhúzó is kellett. Nagy előrelépés volt, amikor a fontokat működés közben lehetett beállítani.
Ekkoriban terjedt el a 852-es kódlap, majd az 1250-es.
A csomagrádiós DigiCom 6-os (DC6) program is használ ékezetes karaktereket.
Apo | 7bit | 437 CWI | 852 LA2 | 1250 MSZ7795 | DC6 |
a' | 097 61 a | 160 a0 | 160 a0 | 225 e1 á | 123 7b { |
A' | 065 41 A | 143 8f Ź | 181 b5 µ | 193 c1 Á | 091 5b [ |
a~ | 097 61 a | 132 84 „ | 132 84 „ | 228 e4 ä | 097 61 a |
A~ | 065 41 A | 142 8e Ž | 142 8e Ž | 196 c4 Ä | 065 41 A |
e' | 101 65 e | 130 82 ‚ | 130 82 ‚ | 233 e9 é | 124 7c | |
E' | 069 45 E | 144 90 | 144 90 | 201 c9 É | 092 5c \ |
i' | 105 69 i | 161 a1 ˇ | 161 a1 ˇ | 237 ed í | 105 69 i |
I' | 073 49 I | 141 8d Ť | 214 d6 Ö | 205 cd Í | 073 49 I |
o' | 111 6f o | 162 a2 ˘ | 162 a2 ˘ | 243 f3 ó | 111 6f o |
O' | 079 4f O | 149 95 • | 224 e0 ŕ | 211 d3 Ó | 079 4f O |
o~ | 111 6f o | 148 94 ” | 148 94 ” | 246 f6 ö | 094 5e ^ |
O~ | 079 4f O | 153 99 ™ | 153 99 ™ | 214 d6 Ö | 094 5e ^ |
o" | 111 6f o | 147 93 “ | 139 8b ‹ | 245 f5 ő | 094 5e ^ |
O" | 079 4f O | 167 a7 § | 138 8a Š | 213 d5 Ő | 094 5e ^ |
u' | 117 75 u | 163 a3 Ł | 163 a3 Ł | 250 fa ú | 117 75 u |
U' | 085 55 U | 151 97 — | 233 e9 é | 218 da Ú | 085 55 U |
u~ | 117 75 u | 129 81 | 129 81 | 252 fc ü | 125 7d } |
U~ | 085 55 U | 154 9a š | 154 9a š | 220 dc Ü | 093 5d ] |
u" | 117 75 u | 150 96 – | 251 fb ű | 251 fb ű | 125 7d } |
U" | 085 55 U | 152 98 | 235 eb ë | 219 db Ű | 093 5d ] |
Minden ékezetes betűt tartalmazó tesztszövegek:
árvíztűrő tükörfúrógép | ÁRVÍZTŰRŐ TÜKÖRFÚRÓGÉP |
különc művésztől túlzó írás | KÜLÖNC MŰVÉSZTŐL TÚLZÓ ÍRÁS |
lányért síró önző nyúlfülű | LÁNYÉRT SÍRÓ ÖNZŐ NYÚLFÜLŰ |
tüskéshátú kígyóbűvölő | TÜSKÉSHÁTÚ KÍGYÓBŰVÖLŐ |