Unicode

Unicode on rahvusvaheline standard arvutites kirjasüsteemide kodeerimiseks, mida haldab Unicode’i konsortsium. See hõlmab suuremaid kirjasüsteeme. 2023. aasta septembris ilmus standardist versioon 15.1.0, mis defineerib 149 813 unikaalset märki. Unicode'is viiakse iga märk vastavusse ühe unikaalse arvuga ehk antakse igale märgile oma "koodipunkt" (ingl code point). Standardis märgitakse seda kujul "U+xxxx", kus xxxx on arv heksadetsimaalsüsteemis. Koodipunkt hoiustab endas infot märgi identiteedi, mitte aga selle välimuse kohta. Tarkvara saab kasutada seda infot, et näiteks vastava märgi mingi versioon ekraanile kuvada. Koodipunkti kodeerimiseks arvutis on mitu standardset viisi. Unicode'i standard defineerib kolm kodeerimise viisi, UTF-8, UTF-16 ja UTF-32, mis lubavad infot märgi kohta edastada vastavalt 8, 16 ja 32 bitiste ühikutena. Neist levinuim on UTF-8, mis on ASCII-ga tagasiühilduv. Tänapäeval on Unicode kõige laialdasemalt kasutatud kirjasüsteemide kodeerimise viis ning tarkvara arendamisel on sellega vastavus eeldatud. Standardiga paralleelne on standard ISO 10646, mida hoitakse vastavuses Unicode'iga. Globaliseerumise ja tehnoloogia arengu tõttu tuli 20. sajandi lõpuks ilmsiks, et senised kirjasüsteemide kodeerimise standardid on liiga piiravad. Lääne firmadel oli keeruline siseneda Aasia turule, kus 7-bitisest ASCII koodist jäi tähestiku kodeerimiseks väheseks. Samuti oli järjest rohkem ühendatud ühiskonnas probleemne asjaolu, et kodeerimise süsteemid ei olnud riistvaras standardiseeritud. Oli vajadus uue suurema võimekusega standardi järele. Unicode'i idee ei olnud midagi täiesti uut. Juba 1984. aastal esitatud ISO mitmebaidise märgikoodi standardi alus oli seatud 16-bitise universaalse koodi loomist silmas pidades. Teiseks Unicode'i eelkäijaks võiks nimetada Xeroxi 1980. aastal tutvustatud Star-tööjaama. Unicode'i projekti vundament laoti 1980. aastatel, mil toimusid esmased arutelud kolme tarkvarainseneri – toona Xeroxis töötanud Joe Beckeri ja Lee Collinsi ning Apple'is töötanud Mark Davise – vahel. Vajadus universaalse kirjasüsteemide kodeerimise viisi järele oli ilmsiks tulnud Apple File Exchange'i arenduse valguses. 1988. aastal hakati ideed ellu viima. Augustis avaldas Joe Becker oma ettepaneku universaalse kodeerimise süsteemi jaoks "Unicode 88", kasutades esimest korda nime "Unicode", mis tema sõnul pidi peegeldama selle universaalset ja unikaalset olemust. Sügisel hakkas Collins looma Unicode märkide andmebaasi. Järgnenud aastate jooksul töörühm laienes ja töö standardi kallal jätkus. 1990. aasta augustis anti välja esimene mustand, mis ei hõlmanud koodide ja blokkide kirjeldusi, tegemist oli pigem kirjeldava ja tutvustava dokumendiga. Oktoobris välja antud mustand oli juba palju sisutihedam, kirjeldades mitmeid algseid ideid märkide indekseerimiseks ja hõlmates erinevaid tabeleid nende süsteemseks hoiustamiseks. 1990. aasta detsembris avaldatud kolmas väljaanne oli juba laialdaselt jagatud. Eesmärk oli saada avalikkuse tagasisidet. 1991. aasta oktoobris avaldati esimene Unicode'i standardit kirjeldav raamat, selle teine köide 1992. aasta juunis. Unicode'i konsortsium loodi 1991. aasta jaanuaris USA California osariigis. See on mittetulundusühing, mille eesmärk on arendada, hooldada ja propageerida rahvusvahelisi tarkvara standardeid, nende hulgas ka Unicode'i. Konsortsium teeb koostööd teiste rahvusvaheliste standardiseerimisega tegelevate organisatsioonidega nagu ISO ja W3C. Konsortsiumi saavad kuuluda nii ettevõtted kui ka üksikisikud ning kuuluvusel on mitu tasandit. Suuremad hääleõiguslikud liikmed on näiteks Apple, Airbnb, Google, Meta ja Microsoft. Samuti on konsortsiumis n-ö nõuandvaid liikmeid, näiteks kuulub nende hulka Soome rahvusraamatukogu, samuti erinevad ülikoolid ja riiklikud asutused. Kõik konsortsiumi liikmed on loetletud Unicode'i veebilehel. Unicode põhineb ideel kodeerida grafeeme, mitte aga nende graafilisi kujusid ehk glüüfe, mida suudavad paremini hallata erinevad kirjastiilid, kasutades näiteks märgistuskeelt. See tähendab, et keerulisematel juhtudel, nagu seda on Hiinas kasutatava Han-tähestiku erinevate ortograafiliste variantide käsitlus, leidub mitmeid lahkarvamusi selle kohta, millised variandid on piisavalt erinevad, et seda oleks vaja teistest variantidest eraldiseisvana käsitleda ja kodeerida. Kõige abstraktsemal tasemel määrab Unicode'i iga tähemärgi jaoks unikaalse numbri, mida nimetatakse koodipunktiks. Paljude visuaalse esindusega seotud küsimustega - sealhulgas suuruse, kuju ja stiili - peaksid eeldatavalt tegelema teksti kuvav tarkvara, nagu veebibrauser või tekstiredaktor. Esimesed 256 koodipunkti peegeldavad ISO/IEC 8859-1 standardit, eesmärgiga lihtsustada juba lääne-euroopa tähestikes kirjutatud tekstide kodeerimist. Et oleks võimalik vanemate kodeeringute ja Unicode'i vahel teisendamine ilma kadudeta, anti paljudele tähemärkidele, mis on peaaegu identsed teistega nii välimuse kui ka eeldatava funktsiooni osas, erinevad koodipunktid. Näiteks dubleerib Unicode'i plokk Halfwidth and Fullwidth Forms täielikult ladina tähestikku, kuna vanad Jaapani, Hiina ja Korea kodeeringud sisaldasid nii "täislaiusega" (vastavalt eelmainitud tähestike tähemärkide laiusele) kui ka "poollaiusega" (vastavalt tavalisele ladina tähestikule) tähemärke. See tähendab, et ühteagu leiduvad erinevad versioonid samast tähemärgist, mis hõivab terve tähemärgi laiuse Jaapani, Korea ja Hiina tähemärkide järgi, kui ka ladina tähestiku järgi. Unicode'i standardiga kodeeritakse tähestikke, mitte keeli. Kui mitu keelt kasutavad sama tähestikku, moodustavadki nad ühe kirja. Ladina kirja kasutavad näiteks sajad erinevad keeled, Hanguli kasutab aga tüüpiliselt ainult korea keel. Unicode'i versioonis 1.1, mis tuli välja 1993. aastal, oli 23 erinevat kirja, aastal 2022 välja tulnud versioon 15.0 aga hõlmas juba 161 erinevat kirja. Lisaks tähtedele on Unicode'iga võimalik kodeerida ka numbreid, kirjavahemärke, matemaatilisi sümboleid, emotikone ja palju muud. See aga jätab veel suure osa sümboleid ja märke kõrvale ning aktiivselt tegeletakse nende lisamisega. Unicode'i Roadman to the BMP komitee (Michael Everson, Rick McGowan, Ken Whistler, V.S. Umamaheswaran) haldab nimekirja nendest kirjadest ja nende võimalikest koodiplokkidest, mis potentsiaalselt lisatakse tulevikus standardile. Erinevalt paljudest teistest kodeerimise süsteemidest ei ole Unicode staatiline. Iga uus versioon lisab juba olemasolevatele grafeemidele uusi juurde, seejuures jättes juba eksisteerivad koodipunktid puutumata. Juba avaldatud versioonid on samuti täiesti stabiilsed. Sedasi on võimalik tagada, et tarkvara, mis on ehitatud kindla versiooni peale, töötab alati. Versioone nummerdatakse kolme arvuga, neist igaüht peab saama esitada ühe baidiga. Esimene number näitab versiooni, teine selle kõrvalversiooni ning kolmas kõrvalversiooni uuendust. Näiteks "Unicode 15.1.0" viitab Unicode'i 15. versiooni uuendamata 1. kõrvalversioonile. Errata ja Corrigenda ehk veaparandused ja korrigeerimised on aeg-ajalt vajaliku, neid avaldatakse Unicode'i veebilehel. Veaparandused parandavad vigu tekstides või muudes informatiivsetes materjalides, nagu koodikaardid. Iga kord, kui standardi uus põhi- või kõrvalversioon avaldatakse, koondatakse kõik senised veaparandused selle versiooniga seotud põhispetsifikatsiooni, koodikaartide või muude standardikomponentide hulka. Mõnikord võivad vead olla aga piisavalt olulised, et need tuleb likvideerida enne järgmise Unicode'i standardi versiooni väljaandmist korrigeerimisega. Selline korrigeerimine ei muuda eelmise versiooni sisu, vaid võimaldab rakendusel, protokollil või muul standardil viidata eelmisele Unicode'i standardi versioonile koos korrigeerimisega. Kui viide ei maini spetsiaalselt korrigeerimist, siis korrigeerimist ei rakendata. Unicode'i standard määratleb koodiruumi: täisarvude jada intervallis ( 0 ; 17 ∗ 2 16 ) {\displaystyle (0;17*2^{16})} , mida nimetatakse koodipunktideks. Vastavalt standardile märgitakse seda vahemikku U+0000–U+10FFFF. Koodiruum on Unicode'i standardi süstemaatiline, arhitektuurist sõltumatu esitus; teksti töödeldakse binaarandmetena kahutades ühte mitmest Unicode'i kodeeringust. Selles esitusviisis eelneb kahekohaline eesliide U+ alati kirjutatud koodipunktile ja koodipunktid ise kirjutatakse kuueteistkümnendsüsteemi numbritena. Alati kirjutatakse vähemalt neli kuueteistkümnendsüsteemi numbrit, vajadusel lisatakse ette nullid. Koodiruumis on kokku 1112064 kehtivat koodipunkti. See arv tuleneb UTF-16 kodeeringu piirangutest, mis võimaldab kodeerida 2 16 {\displaystyle 2^{16}} koodipunkti vahemikus U+0000 kuni U+FFFF, välja arvatud 2 11 {\displaystyle 2^{11}} koodipunkti vahemikus U+D800 kuni U+DFFF, mis kasutatakse asenduspaaridena 2 20 {\displaystyle 2^{20}} koodipunkti kodeerimiseks vahemikus U+10000 kuni U+10FFFF. Unicode'i koodiruum on jagatud 17 tasandiks, nummerdatud 0 kuni 16. Tasandit 0 nimetatakse otsetõlkena Tavaliseks Mitmekeelseks Tasandiks (ingl Basic Multilingual Plane ehk BMP) ning sellel on kõik laialdasemalt kasutatud märgid. Kõik märgid sellel tasandil on vaadeldavad kui üks koodiühik UTF-16 kodeeringus ja kodeeritavad ühe, kahe või kolme baidiga UTF-8 kodeeringus. Tasand 1 on Täiendav Mitmekeelne Tasand (ingl Supplementary Multilingual Plane ehk SMP), millel on need märgid ja sümbolid, mis kas ei mahtunud tasandile 0 või mida kasutatakse väga harva. Nende sekka kuuluvad mitmed ajaloolised kirjad, piktogrammid ja muud abstrakstemad sümbolid. Tasandid 2 ja 3 hoiustavad neid Hiina, Jaapani ja Korea (CJK) tähestike märke, mis ei mahtunud CJK märkide jaoks spetsiaalselt eraldatud plokkidesse tasandil 0. Tasand 14 ehk Täiendav Erikasutusega tasand (ingl Supplementary Special-purpose Plane) sisaldab neid küljenduse kontrollimiseks kasutavaid märke, mis samuti ei mahtunud tasandil 0 vastavasse plokki. Tasandid 15 ja 16 on privaatseks kasutuseks. Kokku on versioonis 15.0 privaatseks kasutuseks 137468 märki, neist 6400 on tasandil 0 ja ülendjäänud tasanditel 15 ja 16. Unicode ei määra rangelt ära piirkondi oma andmestruktuurides, küllaga on kasulik vaadelda tasandit 0 kui jagatuna plokkideks. Üldiselt on ühes plokis olevad märgid omavahel seotdu, sarnase kasutuspiirkonnaga või mõnel muul viisil ühendatud. Need plokid ei piira seda, millised märgid lõpuks kuhu satuvad, aga hõlpsustavad siiski koodipunktide hoomamist. Koodiplokid pole ka kuidagi eksklusiivsed, näiteks matemaatilisi sümboleid leidub valuutasid kujutavate märkide plokis, ladina tähestiku märke leidub vähemalt 14 erinevad koodiplokis. Et laiendada võimalike märkide arvu, kasutab Unicode komposiitmärkide loomise mehhanismi. Sisuliselt tähendab see seda, et täpid, katused jne lisatakse märgile tagant järele. Samas on enamustest laialdaselt kasutusel olevatest märkidest olemas ka valmis versioonid, et muuta teisendamine vanemate kodeerimissüsteemidega lihtsamaks. Selle näide on korea tähestiku Hanguli kodeerimine: Unicode võimaldab koostada hanguli silpe nende üksikutest Hangul Jamo alamkomponentidest, samas on kodeeritud ka 11172 eelkoostatud silpide kombinatsiooni. Kuni aastani 1996, kui tuli välja Unicode 2.0, oli tegemist 16-bitise süsteemiga, siis aga laiendati koodiruum vahemikuni U+0000 kuni u+10FFFF, mis nõuaks kasutada 21-bitist kodeerimist. Selle asemel on võimalik Unicode märke esitada mitme arvu jadana, vastavalt kodeerimise viisile kuni nelja 8-bitise, kahe 16-bitise või ühe 32-bitise koodiühikuna. Enim levinud Unicode'i kodeerimise viis on UTF-8. Nagu nimi viitab, koosnevad UTF-8 kodeeringus märgid 8-bitistest koodiühikutest. UTF-8 on ASCII-ga tagasiühilduv. UTF-8 kodeerimise esimene bait kannab infot selle kohta, mitmest baidist märk koosneb. Ühest baidist koosnevad märgid on kujul 0xxxxxxx, ehk võimalik on näidata täpselt 7 bitti, mis on ASCII märkide pikkus. Kui ühest baidist ei piisa, annab kodeerimine sellest märku kujul 110xxxxx – siin näitab esimese 1-e ja 0 vahel olevate 1-e arv, mitu baiti on märgis lisaks sellele, mida parasjagu loetakse. Iga järgmine bait on kujul 10xxxxxx kus 10 viitab, et tegu on jätkubaidiga. Näide: Euro märgi € kuju Unicode's on U+20AC, mis on kahendsüsteemis 0010 0000 1010 1100. Selle kodeerimiseks läheb vaja kolme baiti. Esimene bait on kujul 1110xxxx. 1-e ja 0-i vahel on kaks 1-e, seega koosneb märk 1+2=3 baidist. Saame kahendkoodis € kujuks: 11100010; 10000010; 10101100 ← alla on joonitud märgi pikkusele viitav ja jätkubaite signaleerivad osad baitides. "Unicode 15.1.0". www.unicode.org. Vaadatud 23. aprillil 2024. "Unicode Character Count V15.1". www.unicode.org. Vaadatud 23. aprillil 2024. "Technical Introduction". www.unicode.org. Vaadatud 23. aprillil 2024. "Early Years of Unicode" [Unicode'i algusaastad]. www.unicode.org. Vaadatud 29. aprillil 2024. "History of Unicode Release and Publication Dates" [Unicode'i väljaannete ajaulugu]. www.unicode.org. Vaadatud 29. aprillil 2024. "History of Unicode" [Unicode'i ajalugu]. www.unicode.org. Vaadatud 23. aprillil 2024. "Unicode Consortium" [Unicode'i konsortium]. www.unicode.org. Vaadatud 29. aprillil 2024. "Members" [Liikmed]. Unicode (Ameerika inglise). Vaadatud 29. aprillil 2024. The Unicode® Standard, Version 15.0 – Core Specification (inglise). Mountain View, CA. 2022. Lk 15. ISBN 978-1-936213-32-0. "Where is my Character?" [Kus on mu tähemärk?]. www.unicode.org. Duplicate. Vaadatud 29. aprillil 2024. "Supported Scripts". www.unicode.org. Vaadatud 29. aprillil 2024. "Roadmap to the BMP". www.unicode.org. Vaadatud 29. aprillil 2024. The Unicode® Standard, Version 15.0 – Core Specification (inglise). Mountain View, CA. 2022. Lk 72. ISBN 978-1-936213-32-0. The Unicode® Standard, Version 15.0 – Core Specification (inglise). Mountain View, CA. 2022. Lk 73. ISBN 978-1-936213-32-0. "Glossary". unicode.org. Vaadatud 29. aprillil 2024. The Unicode® Standard, Version 15.0 – Core Specification (inglise). Mountain View, CA. 2022. Peatükk 2. ISBN 978-1-936213-32-0. The Unicode® Standard, Version 15.0 – Core Specification (inglise). Mountain View, CA. 2022. Lk 88. ISBN 978-1-936213-32-0. The Unicode® Standard, Version 15.0 – Core Specification (inglise). Mountain View, CA. 2022. Lk 43. ISBN 978-1-936213-32-0. The Unicode® Standard, Version 15.0 – Core Specification (inglise). Mountain View, CA. 2022. Lk 44. ISBN 978-1-936213-32-0. "FAQ - UTF-8, UTF-16, UTF-32 & BOM". www.unicode.org. Vaadatud 30. aprillil 2024. "How UTF-8 Unicode encoding works". www.johndcook.com (Ameerika inglise). 9. september 2019. Vaadatud 30. aprillil 2024. The Unicode Consortium TITUS Unicode Sample Page Alphabets of Baltic Languages - UTF-8