HTML/Kodeering
Kõige suuremat segadust külvab HTML-i loomise juures kasutatav tähestik ehk kodeering; inglise keeles encoding või character set.
Mis asi see kodeering siis ikkagi on?
muudaAlustuseks ei tee paha meelde tuletada mõningaid arvutialaseid baasteadmisi.
Ühte tähemärki on arvutis juba ammust aega üles märgitud ühe baidiga. Üks bait koosneb kaheksast bitist ja seega saab bait omada 256 erinevat väärtust, näiteks arvud 0 kuni 255 või arvud -127 kuni 128. Seega saame me ühe baidiga märkida üles maksimaalselt 256 erinevat tähte.
Kodeering polegi mitte midagi muud keerukamat, kui üks teatav standard, mis määrab, millisele baidile milline täht vastab. Näiteks väärtusele 65 vastab A, väärtusele 66 vastab B jne. Näib lihtne, aga keerukaks muudab asjalood tõik, et erinevaid kodeeringustandardeid on päris priske ports ning mitte üheski neist ei vasta iga bait mõnele konkreetsele kirjamärgile ning mis kõige hullem: 256 tähte on lootusetult vähe, et üles märkida kõik maailmas kasutatavad sümbolid (isegi kui hieroglüüfid välja jätta).
Järgnevalt vaatleme lähemalt mitmesuguseid tuntumaid kodeeringuid.
ASCII
muudaKuna arvutid hakkasid arenema ja laiemalt levima kõigepealt just ingliskeelses maailmas, siis on ka arusaadav, et esimestes kasutusele võetud kodeeringutes olid peaasjalikult esindatud inglise keele tähestik, numbrid ja kirjavahemärgid.
ASCII (American Standard Code for Information Interchange) on rangelt seitsmebitine koodistik (väärtused 0..127), kus pole küll ruumi ühelegi mitte-inglise sümbolile, kuid see-eest nende peale, mis seal on, võib alati kindel olla.
- Esimesed 32 kohta ASCII kooditabelis omavad mitmesuguseid eritähendusi nagu näiteks reavahetus ja süsteemi kellahelin.
- Kohtadel 48 kuni 57 on numbrid 0 kuni 9.
- Kohtadel 65 kuni 90 on suurtähed A..Z.
- Kohtadel 97 kuni 122 on väiketähed a..z.
- Ülejäänud positsioonidel asuvad kirjavahemärgid.
ASCII | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | |
0x | NUL | SOH | STX | ETX | EOT | ENQ | ACK | BEL | BS | TAB | LF | VT | FF | CR | SO | SI |
1x | DLE | DC1 | DC2 | DC3 | DC4 | NAK | SYN | ETB | CAN | EM | SUB | ESC | FS | GS | RS | US |
2x | SP | ! | " | # | $ | % | & | ' | ( | ) | * | + | , | - | . | / |
3x | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | : | ; | < | = | > | ? |
4x | @ | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O |
5x | P | Q | R | S | T | U | V | W | X | Y | Z | [ | \ | ] | ^ | _ |
6x | ` | a | b | c | d | e | f | g | h | i | j | k | l | m | n | o |
7x | p | q | r | s | t | u | v | w | x | y | z | { | | | } | ~ | DEL |
ISO 8859 perekond
muudaKõik selle perekonna kodeeringud täiendavad standardset ASCII tähestikku võttes kasutusse ka kaheksanda biti ja määrates seega tähenduse ülejäänud 128-le väärtusele (kohad 128 kuni 255).
Eestikeelses tekstis läheb lisaks ASCII-s määratud sümbolitele tarvis veel 12 tähemärki (Õ, Ä, Ö, Ü, Š, Ž, õ, ä, ö, ü, š ja ž). Eesti keele vajadused rahuldavad neli ISO-8859 kodeeringut: ISO 8859-4, ISO 8859-10, ISO 8859-13, ISO 8859-15. Viimane neist, ISO 8859-15 on Eest riigi poolt sätestatud kui ametlik eesti keele ISO 8859 kodeering.
Ehkki sobilikud tuleb ka nende hulgast valida üks kodeering ja selle juurde jääda, sest kuigi täpitähed asuvad samadel positsioonidel, siis tähed Š, Ž, š ja ž on alati erinevates kohtades.
Mõned nendest ülejäänud ISO-8859 kodeeringutest on üsna lähedal eesti keele vajadustele ning esmapilgul võib tunduda, et vastav kodeering sobib. Kodeeringutes ISO 8859-1, ISO 8859-9 ja ISO 8859-14 on olemas kõik täpitähed, aga puuduvad susisevad häälikud (Š, Ž, š ja ž). Kodeeringutes ISO 8859-2 ja ISO 8859-16 on olemas kõik vajaminevad tähed peale Õ ja õ.
ISO 8859 perekonna kooditabelid
muuda- ISO 8859-1 ehk Latin 1
- ISO 8859-2 ehk Latin 2
- ISO 8859-3 ehk Latin 3 ehk Lõuna Euroopa
- ISO 8859-4 ehk Latin 4 ehk Põhja Euroopa
- ISO 8859-5 ehk Kirillitsa
- ISO 8859-6 ehk Araabia
- ISO 8859-7 ehk Kreeka
- ISO 8859-8 ehk Heebrea
- ISO 8859-9 ehk Latin 5 ehk Türgi
- ISO 8859-10 ehk Latin 6
- ISO 8859-11 ehk Tai
- ISO 8859-13 ehk Latin 7 ehk Balti segu
- ISO 8859-14 ehk Latin 8 ehk Keldi
- ISO 8859-15 ehk Latin 9 ehk Latin 0
- ISO 8859-16 ehk Latin 10 ehk Kagu Euroopa
Nimekirjast puudub ISO 8859-12, mida ei eksisteerigi. Antud number oli ajutiselt korraga kasutusel kahe erineva kooditabeli ettepaneku poolt.
Näited kodeeringute segamisest
muudaJärgnevalt toome paar näidet selle kohta, mis võib juhtuda näiteks siis, kui HTML dokumendi kodeering valesti määrata.
Olgu meil üks eestikeelne luuletus, mis on salvestatud ISO 8859-15 kodeeringus ja näeb sama kodeeringuga vaadates välja järgmine:
Igav liiv ja tühi väli,
taevas pilvine;
jõuan tulles metsa äärde,
tuleb nõmmetee.
Pedak heleroheline,
kask kuldkollane!
Nõmm on sügisele
langend kaenlasse.
Vaadates sama teksti aga venekeelsele tähestikule mõeldud ISO 8859-5 kodeeringuga on täpitähed asendunud aga kirillitsa märkidega:
Igav liiv ja tќhi vфli,
taevas pilvine;
jѕuan tulles metsa ффrde,
tuleb nѕmmetee.
Pedak heleroheline,
kask kuldkollane!
Nѕmm on sќgisele
langend kaenlasse.
Ning vastupidi. Kirjutades venekeelse luuletuse ISO 8859-5 kodeeringus:
Я вас любил: любовь еще, быть может,
В душе моей угасла не совсем;
Но пусть она вас больше не тревожит;
Я не хочу печалить вас ничем.
Я вас любил безмолвно, безнадежно,
То робостью, то ревностью томим;
Явас любил так искренно, так нежно,
Как дай вам бог любимой быть другим.
ja avades selle ISO 8859-15 kodeeringuga, on tulemus täiesti loetamatu:
Ï ÒÐá ÛîÑØÛ: ÛîÑÞÒì ÕéÕ, Ñëâì ÜÞÖÕâ,
² ÔãèÕ ÜÞÕÙ ãÓÐáÛÐ ÝÕ áÞÒáÕÜ;
œÞ ßãáâì ÞÝÐ ÒÐá ÑÞÛìèÕ ÝÕ âàÕÒÞÖØâ;
Ï ÝÕ åÞçã ßÕçÐÛØâì ÒÐá ÝØçÕÜ.
Ï ÒÐá ÛîÑØÛ ÑÕ×ÜÞÛÒÝÞ, ÑÕ×ÝÐÔÕÖÝÞ,
ÂÞ àÞÑÞáâìî, âÞ àÕÒÝÞáâìî âÞÜØÜ;
ÏÒÐá ÛîÑØÛ âÐÚ ØáÚàÕÝÝÞ, âÐÚ ÝÕÖÝÞ,
ºÐÚ ÔÐÙ ÒÐÜ ÑÞÓ ÛîÑØÜÞÙ Ñëâì ÔàãÓØÜ.
Kodeeringud kirillitsa tarbeks
muudaSpetsiifilisematest kooditabelitest on Eestis kindlasti põhjust rääkida nendest, mida tarvitatakse kirillitsa kirjapanekuks. Ehkki ka eelmises peatükis tutvustatud ISO 8859-5 kodeering on mõeldud kirillitsa tarbeks on sellest oluliselt populaarsemad KOI8-R, KOI8-U ja Windows-1251.
Vene keeles on lühendi KOI8 tähendus Код Обмена Информацией, 8 бит. Erinevalt ISO 8859-5 ja Windows-1251 koodistikust on KOI8 puhul kirillitsa tähed järjestatud võimalikult lähedaselt ladina alfabeedile. Sellise järjestuse eeliseks on, et kui eemaldada viimane bitt, siis muutub kirillitsas kirjutatud tekst arusaadavaks ASCII terminali ekraanil. Näiteks fraasist "Русский Текст" saab fraas "rUSSKIJ tEKST".
Kirillitsat kasutavad kooditabelid
muuda- ISO 8859-5 (vähekasutatud ja puudustega)
- KOI8-R - vene ja bulgaaria keel
- KOI8-U - ukraina keel
- Windows-1251 - ungari keel
Unicode
muudaKõik eelpoolkirjeldatud kodeeringud kannatavad ühe tõsise puuduse all - neid kasutades pole vähimatki võimalust kirjutada ühel leheküljel kahes vähegi erineva tähestikuga keeles - isegi niivõrd triviaalset asja, nagu eesti-vene sõnaraamat, on täiesti võimatu koostada. Appi tuleb internatsionaliseerijate kõige suurem sõber - unicode.
Unicode on tõsiselt ambitsioonikas projekt, mille eesmärk on ühte kodeeringusse paigutada kõik maailmas kasutatavad või kasutusel olnud sümbolid. Seal on ruumi kirillitsale ja ruunidele, hieroglüüfidele ja rooma numbritele ja palju palju enam. Teoreetiliselt mahutab unicode-i tähestik 220 + 216 erinevat sümbolit, mida peaks olema piisavalt (täpselt 1 114 112 ehk veidi üle miljoni). Hetkel on kasutuses veidi üle 96 000 märgi ning unicode on maailma kõige täielikum kodeering.
Unicode-i kirjapanekuks on kasutusel mitmesuguseid kaardistusi, tuntud kui UTF (Unicode Transformation Format). Nende seas on UTF-32, UTF-16, UTF-8 ja UTF-7, kusjuures numbrid näitavad, kui mitu bitti on minimaalselt tarvis ühe tähemärgi kirjapanekuks. UTF-32 puhul kasutatakse iga sümboli jaoks 32 bitti ehk 4 baiti, ülejäänute puhul on sümboli kirjapanekuks vajalike baitide arv erinev.
Hoolimata mitmetest tehnilistest raskustest on unicode saavutanud domineeriva positsiooni operatsioonisüsteemides. Microsoft Windows NT ning selle järglased Windows 2000 ja Windows XP kasutavad laialdaselt UTF-16 kodeeringut. UNIX-i laadsed operatsioonisüsteemid nagu GNU/Linux, BSD ja Mac OS X kasutavad mitmekeelse teksti tarbeks UTF-8 kodeeringut.
Veebis omab unicode erilist tähtsust, sest kõik moodsad brauserid kasutavad sisemiselt unicode-i ning on seega (vastavate fontide olemasolul) võimelised kuvama lehekülgi kõigis maailma keeltes. XML-i ja XHTML-i vaikimisi kodeeringuks on määratud UTF-8 ning unicode-i kasutamist soovitab ka W3C.
Ka käesolev lehekülg ja kogu Wikibooks-i ja Wikipedia leheküljestikud kasutavad unicode-i.