Unicode
Wikipedia
Unicode on ohjelmistotalojen kehittämä laaja merkistöstandardi, joka kattaa suurimman osan maailman kirjoitettujen kielten käyttämistä merkeistä. Unicode määrittelee yksilöivän koodiarvon yli 90 000 erilaiselle kirjoitusmerkille. Sen avulla voidaan esittää lähes kaikki maailman kielten käyttämät merkit. Erikielisiä versioita ohjelmista voidaan toteuttaa samasta lähdekoodista. Useat vanhemmat merkistöt kuten ASCII ja ISO 8859-1 ovat 7- tai 8-bittisiä ja voivat näin määritellä enintään 128 tai 256 eri merkkiä. Unicodessa on yli miljoona mahdollista merkkipaikkaa.
Sisällysluettelo |
[muokkaa] Unicode-merkistön historia
Maailmassa puhutaan tuhansia kieliä, jotka käyttävät kymmeniä erilaisia kirjoitusjärjestelmiä. Näissä järjestelmissä on kymmeniä tuhansia erilaisia merkkejä ja kunkin kielen kirjoittamiseen tarvitaan merkeistä sille ominainen valikoima.
Ajatus yleismaailmallisesta ja mahdollisimman kattavasta merkistöstä alkoi itää 1980-luvulla useammallakin taholla. Vuonna 1984 ISO ja IEC perustivat yhdessä työryhmän valmistelemaan tällaista merkistöä, joka sai nimekseen ISO/IEC 10646. Ohjelmistoteollisuuden intressiryhmän nimi oli The Unicode Consortium ja se perustettiin 1990. Unicode on saanut enemmän näkyvyyttä kuin ISO, sillä ”virallinen” standardointityö mielletään jähmeäksi ja teollisuuden edustaja Unicode taas dynaamiseksi. Käytännössä kuitenkin ISO/IEC 10646 ja Unicode ovat sama merkistö, sillä ne tekevät merkistötyössä yhteistyötä.
Unicode-standardin versio 3.0 määritteli yksilöivän 16-bittisen koodiarvon 49 194 merkille. Käytössä oleva 65 536 merkin koodiavaruus on jaettu lohkoihin, joihin on ryhmitelty samaan kirjoitusjärjestelmään kuuluvat merkit ja yleiset symbolit. Lohkoihin jäi jonkin verran hukkatilaa, ja vuosien varrella on huomattu tarvittavien merkkien määrän ylittävän kirkkaasti 65 000 merkin rajan. Niinpä Unicodeen on rakennettu laajennusmekanismi, jonka avulla voidaan esittää yli miljoona merkkiä; tätä hyödynnetään Unicoden uusimmissa versioissa.
[muokkaa] Unicode-merkistön rakenne
Unicoden merkkiavaruus jakautuu 17 tasoon (engl. plane). Jokainen taso on kooltaan 65 536 merkkipaikkaa, joten mahdollisia merkkipaikkoja on 1 114 112. Ensimmäinen taso on nimeltään Basic Multilingual Plane, ja se sisältää suunnilleen kaikki nykyään puhuttavien kielten kirjoittamiseen tarvittavat merkit. Muut tasot sisältävät toistaiseksi lähinnä historiallisten kirjoitusjärjestelmien merkkejä.
Tasot on jaettu edelleen lohkoiksi, joihin on koottu saman kirjoitusjärjestelmän merkkejä. Esimerkiksi kirjaimet A–Z ovat Latinalainen perusosa -nimisessä lohkossa ja Ä ja Ö kirjaimet sen Latin1-täydennysosassa. Latinalaisia kirjaimia on myös kahdessa muussa täydennysosassa, Latinalaisen merkistön täydennysosa A ja B, sekä lisälaajennusosasta. Usein yhden kirjoitusjärjestelmän merkit on kuitenkin järjestetty yhteen lohkoon.
Unicode-standardin versio 4.1.0 määrittelee yhteensä 97 786 merkkiä ja ohjauskoodia.
Unicode-merkkeihin viitataan yleensä niiden merkkikoodilla. Koodi on muotoa U+xxxx, jossa xxxx on heksadesimaaliluku. Esimerkiksi A-kirjaimen merkkikoodi on U+0041.
[muokkaa] Unicoden merkistökoodaukset
Unicode-merkkejä voidaan kirjoittaa tiedostoihin eri tavoin. Unicode-standardi tukee kolmea erilaista koodaustapaa: UTF-8, UTF-16 ja UTF-32.
[muokkaa] UTF-8
UTF-8 on Unicoden vaihtelevanpituinen koodaustapa. Sen etuna on osittainen yhteensopivuus vanhempien järjestelmien kanssa, jotka käsittelevät merkkejä kahdeksanbittisinä tavuina. UTF-8 on rakennettu siten, että ASCII-merkistöön kuuluvat merkit (kirjaimet A–Z) säilyvät siinä samoina kuin ASCII:ssa, ja muut merkit koodataan vaihtelevan pituisena oktettijonona.
Koodipaikasta riippuen yksi merkki vie tallennettuna tilaa yhdestä neljään tavua. Tavujen määrä riippuu koodipaikasta seuraavasti:
- U+0000..U+007F: yksi tavu
- U+0080..U+07FF: kaksi tavua
- U+0800..U+FFFF: kolme tavua
- U+10000..U+10FFFF: neljä tavua
Latin-1-lohkon merkit vievät koodauksessa siten kaksi tavua ja muut Basic Multilingual Plane -tason merkit kolme. Tekstidatan koon lisäys ei siten ole merkittävä ainakaan latinalaisilla kirjaimilla kirjoitetussa tekstissä.
UTF-8:n etuna on että se voidaan helposti automaattisesti tunnistaa, mikä ei ole mahdollista perinteisillä kahdeksanbittisillä merkistöillä. UTF-8 on lisäksi tilaton, päinvastoin kuin Itä-Aasiassa perinteisesti käytetty ISO-2022-koodaus, joten rikkoontuneesta datasta menetetään vain osa, ei koko loppua tekstiä.
[muokkaa] UTF-16
UTF-16:ssa yksittäinen merkki tallennetaan yhtenä tai kahtena tavuparina. Ensimmäisellä tasolla olevien merkkien (U+0000..U+FFFF) tallentamiseen riittää yksi tavupari. Muilla 16 tasolla sijaitsevien merkkien (U+10000..U+10FFFF) tallentaminen on hieman monimutkaisempaa, ja siihen tarvitaan kaksi tavuparia.
Ensimmäisen tason ulkopuolisten merkkien koodaamisessa käytetään ns. sijaismerkkejä (engl. surrogate code points). Sijaismerkit sijaitsevat ensimmäisessä tasossa, ja niitä on 2048 kappaletta jaettuna kahteen 1024 merkin ryhmään (high surrogates ja low surrogates). Näistä kahdesta 1024 merkin ryhmästä voidaan muodostaa 1 048 576 (1024 × 1024) kombinaatiota, mikä riittää ylimpien 16 tason merkkien osoittamiseen (16 × 65 536 = 1 048 576).
UTF-16:sta on kolme versiota, joiden erot selittyvät tavujärjestyksen eroilla. UTF-16LE on little endian, eli siinä jokaisen tavuparin vähiten merkitsevä tavu on ensimmäisenä. UTF-16BE on big endian, eli tavuparin eniten merkitsevä tavu on ensimmäisenä.
Lopuksi on olemassa muunnelma, jossa tavujärjestys on jätetty avoimeksi; tässä muunnelmassa tekstin tulisi alkaa koodilla U+FEFF, joka on leveydetön tyhje joka ei salli rivinvaihtoa ympärilleen (engl. zero-width nonbreaking space). Sen tavujärjestyspeilikuva U+FFFE on tulevaisuudessakin takuuvarmasti määrittelemätön merkki, joka on siten laiton Unicodessa. Näin ensimmäisen merkin lukemisen jälkeen tiedetään missä tavujärjestyksessä data on.
[muokkaa] UTF-32
Koodaustavoista suoraviivaisin on UTF-32. Siinä jokainen merkki tallennetaan neljän tavun mittaisena. Myös siitä on kolme versiota, UTF-32LE ja UTF-32BE sekä sellainen, jossa käytetään tavujärjestysmerkkiä.
[muokkaa] Muut
- UTF-7 on ehdotus Unicoden koodaamiseen 7-bittisten ASCII-merkistön merkkien avulla. Tarve koodaukselle on kuitenkin ollut vähäistä.
- Punycode on RFC 3492:ssa määritelty koodaus Unicoden käytölle DNS-nimissä. Sitä käytetään mahdollistamaan skandit web-sivustojen nimissä.
[muokkaa] Unicoden käyttö
Ennen Unicoden yleistymistä useimmat käyttöjärjestelmät tallensivat tekstin käyttäen omia ratkaisujaan, jotka eivät olleet keskenään yhteensopivia. Tekstin esittäminen rajoittui lisäksi usein muutamaan kieleen merkistöä kohden. Unicode-tuki Windowseissa yleistyi vasta Windows NT:n ja sittemmin Windows 2000:n myötä, 9x-versiot eivät sitä sisältäneet. Mobiililaitteista sitä tukevat muun muassa Symbian-laitteet.
Käyttöjärjestelmän lisäksi tarvitaan Unicodelle tukia myös ohjelmointikielissä. Perinteisesti C ja C++ ovat tukeneet ainoastaan ASCII-merkistöä tai muutamia käyttöjärjestelmän omia koodisivuja, mutta viime vuosina uusimmat standardit ovat lisänneet myös monitavuiset merkistöt näihin kieliin. Java käyttää kaiken tekstin tallentamiseen sisäisesti pelkästään Unicodea. UTF-8-koodaus on nykyään melko laajassa käytössä, koska se mahdollistaa erikielisten tekstielementtien esiintymisen samalla sivulla.
Nykyään myös vauhdilla yleistyneet Linux ja Windows XP sisältävät Unicode-tuen ja kun Windows-käyttöjärjestelmistä vanhat 9x-pohjaiset järjestelmät jäävät pois käytöstä, niin Unicoden tulevaisuus näyttää valoisalta. Osa Linux-käyttöjärjestelmien valmistajista asettaa järjestelmän jo oletuksena täyteen Unicode-tilaan (mukaan lukien ohjelmat, tiedostojärjestelmä jne.), ja muissakin siirtymisen voi halutessaan tehdä. Kun mobiililaitteista yhä suurempi osa tulee olemaan älypuhelimia, niin niihinkin on mahdollista sisäänrakentaa monikielinen tuki.
[muokkaa] Aiheesta muualla
- http://www.unicode.org/
- DecodeUnicode - Unicode WIKI 50.000 gifs