Materjalid koostas ja kursuse viib läbi
Tartu Ülikooli arvutiteaduse instituudi programmeerimise õpetamise töörühm
< eelmine | 7. nädala sisukord | järgmine > |
7.5 Silmaring: Tekstikodeeringud
Erinevad tähestikud
Vahel tuleb ette, et tekstis paistab mingi täht kummalisena - võib-olla on see asendatud teise tähega, arusaamatu märgiga, küsimärgiga või hoopis mitme märgiga. Eestikeelses tekstis on sellisteks asendatud tähtedeks just õ, ä, ö, ü ja ka š, ž. Need on tähed, mis ladina põhitähestikus puuduvad. Selliseid teistele võõraid tähti leidub paljudes ladina tähestikule põhinevates tähestikes. Näiteks on poola tähestikus ą, ć, ę, ł, ń, ó, ś, ź, ż, saksa keeles aga kasutatakse tähti ä, ö, ü ja ß. Selliste tähtedega on eriti arvutitega seoses mõnevõrra rohkem muresid kui ladina tähestiku põhitähtedega. Mõnedel juhtudel ongi neist loobutud - näiteks kriipsukesed, kaarekesed ja konksukesed jäetakse ära või täht asendatakse mingite tähtede kombinatsiooniga. Tegelikult kannavad need omapärased tähed siiski lisaks keelelisele tähendusele ka teatud ajaloo ja identiteediga seotud väärtust ja nendest loobumist ei tohiks kergekäeliselt ette võtta.
Lisaks ladina tähestikul põhinevatele tähestikele on kasutusel palju teisi süsteeme, milledel omakorda alamsüsteeme. Näiteks vene, ukraina ja valgevene tähestikud on sarnased, aga mitte viimse täheni samad. Mõnede keelte puhul kasutatakse paralleelselt erinevaid tähestikke. Nii on näiteks serbia keele puhul kasutusel nii ladina tähestikul kui ka kirillitsal põhinevad variandid.
Arvestades, et mitmetes keeltes on kasutusel hieroglüüfid, mida võib olla väga palju (eriti võrreldes paarikümne tähega meie kandi tähestikes), on tegemist tuhandete erinevate märkidega, mida maailmas tekstide kirjapanekuks kasutatakse.
7 või 8 bitti. ASCII jt
Natuke lihtsustatult võib öelda, et arvutis kujutatakse tähti (ja teisigi märke) kahendarvudena - ühtede ja nullidega. Vaja on teatud standardit selleks, et konkreetne täht paistaks ka mujal sellisena nagu algselt mõeldud. Vahepeal ju "tõlgitakse" märk kahendarvuks ja jälle tagasi.
1963. aastal avaldati ASCII (American Standard Code for Information Interchange) standardi esimene versioon. Eks standardiseerimispüüdeid oli ennegi ja lokaalselt need ka toimisid, aga ASCII mõju oli laiem ja see on ka mitmete edasiste standardite aluseks.
ASCII põhitabelis on 128 märki. Konkreetse märgi tähistamiseks kasutakse kahendarvu, milles on seitse kahendnumbrit (e bitti). Erinevaid võimalusi on sellisel juhul 128 (= 27) ja nii ongi ASCII põhitabelis 128 märki. Põhitabelis on erinevate erimärkide ja numbrite kõrval ladina tähestiku need tähed, mida kasutatakse inglise keeles. On nii suurtähed kui väiketähed. Seejuures suurtähed A-Z (koodid kümnendsüsteemis 65 kuni 90, kahendsüsteemis 1000001 kuni 1011010) on väikestest a-z (koodid kümnendsüsteemis 97 kuni 122, kahendsüsteemis 1100001 kuni 1111010) eespool. Põhitabelis olevate märkidega saab ingliskeelseid tekste juba kenasti kirja panna.
Kui aga tahaks kasutada teisi tähti, siis juba ei saa. Loomulik oli võtta mängu kaheksas bitt, mis annab 128 märki juurde. Nii tehtigi, aga võimalikke kandidaate järgmisele 128 kohale oli rohkem, kui sinna ära mahtus. Oli ju vajadus erinevate ladina tähestikul baseeruvate tähestike spetsiaalsete tähtede jaoks, samuti kreeka tähtede jaoks, kirillitsa tähtede jaoks jm.
Siin oligi hargnemise koht selles mõttes, et kasutusele võeti erinevad kooditabelid, kus sama koodiga võisid olla erinevad märgid. Järgnevas tabelis on mõned märgid erinevatest kooditabelitest.
Kodeering | Kood 177 | Kood 195 | Kood 212 | Kood 213 |
---|---|---|---|---|
Windows-1252 (CP1252) | ± | Ã | Ô | Õ |
ISO/IEC 8859-5 (mitteformaalselt Latin/Cyrillic) | Б | У | д | е |
ISO/IEC 8859-7 (mitteformaalselt Latin/Greek) | ± | Γ | Τ | Υ |
Sellise lähenemise üks nõrku kohti on, et ühes ja samas tekstis ei saa hästi kasutada erinevate kooditabelite märke.
Mitu baiti. UTF-8. Unicode
Edasi püüti standardi poole, kus kõik vajalikud märgid on erinevate koodidega olemas. 1993. aasta alguses tutvustati ametlikult kodeeringut UTF-8. UTF-8 on alates 2008. aastast veebis levinuim koodeering (praegu on hinnanguliselt umbes 87% veebilehtedest selles kodeeringus). UTF-8 on lühend fraasist Universal Coded Character Set + Transformation Format – 8-bit. UTF-8 kasutab kaheksabitilisi koodiühikuid, mida konkreetse märgi jaoks võib olla kasutuses 1 kuni 4. Kaheksa bitti annab kokku ühe baidi ja baitide kaupa on mõistlik "arveldada".
UTF-8 esimesed 128 märki (ja koodidki) on samad, mis ASCII põhitabelis. UTF-8 kasutab neil juhtudel ühte kaheksabitilist koodiühikut. Kõik ASCII kodeeringus tekstid on seega kohe ka UTF-8 kodeeringus.
Järgmise 1920 märgi puhul kasutatakse kahte kaheksabitilist koodiühikut. Siin on erinevate ladina tähestikul põhinevate tähestike erilisemad tähed, samuti kreeka, kirillitsa, heebrea, araabia, kopti ja armeenia tähed. Kolme kaheksabitilist koodiühikut kasutatakse näiteks hiina, korea ja jaapani kirjamärkide puhul. Nelja koodiühikut on vaja ülejäänud Unicode'i tabelis olevate märkide jaoks, mille hulgas on näiteks matemaatilised sümbolid ja piktogrammid.
Unicode on rahvusvaheline standard arvutite tekstide kodeerimiseks. Unicode'i tabelid on olemas väga erinevate sümbolite jaoks. Lehitsege tabeleid julgesti. Kuna kahendsüsteemi arvud lähevad kiiresti pikaks, siis on tabelites kasutatud vastavaid kuueteistkümnendsüsteemi arve.
Pythonis
Ka Pythonis saab kasutada erinevaid tekstikodeeringuid. Nii saame näiteks faili avamisel tekstikodeeringu määrata: open(failiNimi, "w", encoding="UTF-8")
.
Nüüd püüame aga Unicode'i tabelites olevaid huvitavaid märke ekraanile saada. Vastav ingliskeelne materjal on selles abiks olnud. Proovime saada ekraanile kreeka suure delta (kood 0394) ja jaava tähe, mille kood on A996.
print('\u0394\uA996')
< eelmine | 7. nädala sisukord | järgmine > |