Az ISO 8859 család

Az ISO (International Organization for Standardization) is az ASCII-t vette alapul egy „univerzális” kódtábla kialakításához, mely a „világ” többi nyelvét is megpróbálta reprezentálni, kevés sikerrel. Egészen az 1980-as évekig komoly problémának minősült Európa országainak, valamint néhány más ország különböző nyelvi karaktereinek a standardizálása is.

Az 1980-as években az ISO 8859 standard család, más néven Latin kódtáblák oldották meg ezt a problémát, amelyek több nyelvet tudnak kombinálni. Ezt úgy érték el, hogy az új kódtáblákban a 7-bites ASCII kódtáblát egy bittel kiegészítve 8-bitesre bővítették – hiszen addigra a 8. bit hibajelző szerepe eltűnt –, ezzel megduplázva a rendelkezésre álló karakterek számát (28 = 256), hogy reprezentálni tudják a nyugat-európai ékezetes betűket, és elnevezték Latin-1 táblának, majd létrehoztak egy kelet-európait is, melyet Latin-2-nek neveztek el, ebben van a magyar nyelv is. Több ilyen kódtábla is keletkezett (Latin-3, Latin-4 stb., egészen Latin-16-ig), melyek más-más karaktercsoportokra voltak tervezve. Ma ezek a kódtáblák az ISO/IEC 8859 karakterkódolási rendszerbe tartoznak.

A különböző nyelvek reprezentációja új problémákat szült: a lokalizáció kérdését. Az egyes nyelvek ugyanis más ábécésorrendbe rendezést követeltek meg, valamint ezzel összefüggésben a több karakterből álló betűk egységes kezelése – például a reguláris kifejezéseknél az [a-z] tartomány definíciója (lásd Lokalizáció és rendezés rész) – is problémát jelentett. Sajnos ezek megnyugtató rendezésére a Unicode karakterkészlet megjelenéséig várni kellett.

A Latin kódtáblák kódtáblánként két részre oszthatók. Az első 128 karakter minden esetben az ASCII kódtábla maga – kontroll karakterek (például a TAB), nagy- és kisbetűk, számok, punktuációk –, és a második 128-ban vannak a táblánként különböző nyugat- és kelet-európai vagy más nyelvi ékezetek és speciális központozási jelek (pl. ö, ü). A Latin kódtáblák rendszere előnyös volt, mert ugyan külön-külön kódtáblákon, de belefért 1 bájtba (8 bit) az összes, a kódtáblában reprezentált nyugati és európai nyelv, az egyes kódtáblákkal pedig még több nyelv is egységesen kezelhetővé vált. A rendszer így nem követelt technikai oldalról nézve inkompatibilis változtatást az domináns ASCII-hoz vagy a használatban lévő (8-bitet egyben kezelni tudó) hardverekhez képest, mely a gyors elterjedéséhez vezetett.

Emiatt a kompromisszum miatt a különböző, eltérő kódtáblához sorolt nyelveket nem lehet egy fájlon belül használni. A különböző nyelvekhez tartozó karakterek beírásához nyelvet és fájlt kell váltani. Az ékezetes karakterek különböző variánsai úgy vannak elhelyezve a kódtáblákon, hogy az egyező és hasonló karakterek ugyanarra a kódpontra essenek, könnyítve rossz kódtábla használata esetén is az olvashatóságot. A megfelelő nyelvű karakterek megjelenítéséhez a fájlt a megfelelő kódtáblában kell megnyitni, különben máshogy jelennek meg ugyanazok a betűk, noha a kódjuk ugyanaz. Például:

Kódtábla

Ékezetes példaszöveg

ISO8859-1

árvíztûrõ tükörfúrógép

ISO8859-2

árvíztűrő tükörfúrógép

ISO8859-3

árvíztûrġ tükörfúrógép

ISO8859-4

árvíztûrõ tükörfúrķgép

ISO8859-5

сrvэztћrѕ tќkіrfњrѓgщp

ISO8859-7

αrvνztϋrυ tόkφrfϊrσgιp

ISO8859-9

árvíztûrõ tükörfúrógép

ISO8859-10

árvíztûrõ tükörfúrógép

ISO8859-13

įrvķztūrõ tükörfśrógép

ISO8859-14

árvíztûrõ tükörfúrógép

Ez nehézkes feladat, ezért sokszor a felhasználók a tipográfiailag nem helyes variánsokat használják – vagy egyszerűen ékezet nélkül írnak, ami az ékezetesítés problémáját hozta magával –, annak tudatában, hogy a helyes kódtáblával megnyitva az ékezetek úgyis helyesen fognak megjelenni. Az ilyen kódolású szövegek manapság szinte egytől egyig konvertálva lettek UTF-8-ra. A problémát utólag az okozza, hogy nem megfelelő bemeneti kódtáblát használtak a konverzió során. Például manapság is találkozhatunk hullámos ő-vel (õ) és kalapos ű-vel (û), mely a Latin-2 kódtábla helyett helytelenül használt Latin-1-re – és ilyen formában Unicode-ra konvertálásra – utal. Szerencsére az ő és ű betűn kívül a magyar ábécé betűi benne vannak a Latin-1 kódtáblában, mivel más lefedett nyelvek betűivel egyeznek:

Latin-1

kódtáblában

szereplő

magyar ékezetes

magánhangzók

Latin-1 kódtábla által lefedett nyelvek,

amelyek szintén használják a magánhangzót

á

afrikaans, feröeri, galíciai, izlandi, ír, norvég, okcitán, portugál, skót gael, spanyol

é

afrikaans, angol, galíciai, izlandi, ír, olasz, norvég, okcitán, portugál, skót gael,
spanyol, svéd

í

afrikaans, feröeri, galíciai, izlandi, okcitán, portugál, spanyol

ó

olasz, norvég, okcitán, portugál, skót gael, spanyol

ö

luxemburgi, norvég

ú

afrikaans, feröeri, izlandi, ír, okcitán, portugál, spanyol

ü

luxemburgi, norvég, spanyol

Amennyiben a rossz ékezeteket tartalmazó fájlokban helyre kívánjuk hozni a karaktereket, az UTF-8 formátumú fájlt először nagy valószínűséggel Latin-1-re kell konvertálni, majd Latin-2-ként megnyitva újra UTF-8-ra (lásd A karakterreprezentáció-konverziós hibák és a betűszemét (mojibake) valamint Kódolási hibák, furcsaságok rész). Mivel az UTF-8 sokkal több karaktert képes kódolni, a konverzió nem mindig fut le hibátlanul. Az adatvesztés elkerülése végett ilyenkor célszerűbb „keresés és csere” módszert alkalmazni.

Több hasonló próbálkozás is volt az ISO szervezetén kívül, például az Apple Macintosh MacRoman kódtáblája vagy az IBM codepage 850-es (CP850) rendszer (és a CP852, amely a magyar ékezeteket tartalmazza hasonlóan a Latin-2 kódtáblához), melyet a DOS (Disk Operating System) családba tartozó rendszerek használnak. Ezekben kódolt szövegekkel egyre kisebb eséllyel ugyan, de manapság is találkozhatunk. A Windows sokáig a windows-1250 (Közép- és Kelet-Európa) és a windows-1252 (latin ábécé) nevű kódlapot használta, ezekkel mostanság főleg régi honlapokon találkozhatunk. Hiába, a régi mondás még mindig igaz:

../_images/xkcd_927_standards.png