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.
A LaTeX így szereti az ékezeteket: \'Arv\'izt\H ur\H o t\"uk\"orf\'ur\'o\g\'ep
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Ő |