Karakterkódolás

Innen: HamWiki
A lap korábbi változatát látod, amilyen HG2ECZ (vitalap | közreműködések) 2006. augusztus 10., 00:45-kor történt szerkesztése után volt. (→‎Karakterkódolások közötti konverzió)
Ugrás a navigációhoz Ugrás a kereséshez

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é.

ASCII karakterek

Szabványos ASCII karakterei

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.
Kiterjesztett karakterkészlet

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 *.jpg; do uj=`echo "$i" | iconv -f iso8859-2 -t utf-8`; mv "$i" "$uj"; done</HIGHLIGHTSYNTAX>

Illetve egy másik, amikor nem az állomány nevét, hanem a tartalmát szeretnénk iso8859-2 -ről utf-8-ba konvertálni például Linux alatt:

<HIGHLIGHTSYNTAX language="bash">for i in *.txt; do iconv -f iso8859-2 -t utf-8 < "$i" > "$i.tmp"; mv "$i.tmp" "$i"; 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Ő