# Merkistö

**Merkistö** tai **koodisivu** on tietotekniikassa ja tietoliikenteessä sopimus, joka määrittelee, miten bittiyhdistelminä esiintyvät binääriluvut tulee tulkita johonkin kirjoitusjärjestelmään kuuluviksi merkeiksi. Tietokone pystyy käsittelemään oikein vain sellaisia merkkejä, jotka sisältyvät sen tuntemaan merkistöön. Koska merkistöjä on useita erilaisia, on myös oltava selvillä, mitä merkistöä kulloinkin on käytettävä. Väärän merkistön käyttö johtaa helposti informaation vääristymiseen tai katoamiseen.

Kaikki nykyaikaiset tietokoneet käsittelevät dataa kahdeksanbittisinä tavuina, joten yhdellä tavulla voidaan esittää 256 arvoa. Yksi merkki vie tilaa vähintään yhden tavun ja laajoissa merkistöissä ehkä enemmänkin.

## Merkki tietoteknisenä käsitteenä

Tietokoneen muistissa kukin lukuarvo vastaa tiettyä merkkiä, ja esimerkiksi ASCII-merkistössä lukuarvot 63–67 kytkeytyvät merkkeihin seuraavasti:

* `63` = *?*
* `64` = *@*
* `65` = *A*
* `66` = *B*
* `67` = *C*

Erillisiksi merkeiksi merkistössä jäsentyvät isot ja pienet kirjaimet, samoin kuin numerot sekä erikois- ja välimerkit. Merkeiksi lasketaan myös itsessään näkymättömät tai kuviottomat kirjoitusmerkit, kuten välilyönti, ja lisäksi merkistöön yleensä sisältyy erityisiä teknisiä ohjaus- eli kontrollikoodeja. Merkin käsitteeseen ei sisälly kirjoitusmerkin leikkaus eli tyyli, joka voi vaihdella melkoisesti kirjasinlajin mukaan.

Eri kirjoitusjärjestelmiin kuuluvat kirjaimet katsotaan usein erillisiksi merkeiksi, vaikka ne näyttäisivät keskenään aivan samanlaisilta, kuten latinalainen suuraakkonen A, kyrillinen suuraakkonen А ja kreikkalainen suuraakkonen Α (alfa, pienaakkosena α). Yhden kirjoitusjärjestelmän piirissä käytettävät merkitkään eivät aina ole ulkonaisesti erotettavissa toisistaan, sillä Unicode-merkistössä on esimerkiksi useita viivamerkkejä hieman erilaisiin tarkoituksiin: tavallinen yhdysviiva (U+002D eli niin sanottu yhdysmerkki-miinus) sopii tarvittaessa sekä yhdysviivaksi että etenkin tietotekniseksi miinusmerkiksi, mutta vaihtoehtoisesti voidaan käyttää erityistä yhdysmerkkiä (U+2010), joka on tarkoitettu käytettäväksi pelkästään yhdysviivana, sitovaa yhdysmerkkiä (U+2011), jonka jälkeen rivinvaihto ei ole sallittu, sekä miinusta (U+2212), joka on tarkoitettu erityisesti typografiseksi miinusmerkiksi. Näistä typografinen miinusmerkki on muita selvästi pitempi, mutta muut ovat (tai ainakin niiden pitäisi olla) keskenään aivan samannäköisiä.

## Historia

Ensimmäisinä sähköisinä merkistöinä voidaan pitää kaukokirjoitinlaitteissa jo 1800-luvulla käytettyjä ”5-bittisiä” Baudot-koodistoja, joihin kuului 26 varsinaista merkkiä ja kuusi ohjauskoodia esimerkiksi merkistön vaihdolle ja kirjoituspään palautukselle., Niistä voi katsoa myös 1960-luvulla kehitetyn 7-bittisen ASCII-merkistön polveutuvan. Yhteistä vanhoille merkistöille on yleensä se, että merkit on valittu vain tiettyä kieltä varten: esimerkiksi Yhdysvalloissa kehitetty ASCII soveltuu melko hyvin amerikanenglannin kirjoittamiseen, mutta muun muassa suomen, ruotsin ja saksan kielissä tarvittavia kirjaimia Å/å, Ä/ä, Ö/ö, Ü/ü ja ß ei siinä ole. Tämän vuoksi merkistöistä kehitettiin useita rinnakkaismuotoja eri maiden tarpeita varten. Suomessa käytettiin vielä 1980-luvulla yleisesti ASCII:n SF7-muunnosta, jossa eräät erikoismerkit oli korvattu suomessa ja ruotsissa tarvittavilla kirjaimilla.

Koska ASCII on 7-bittinen ja tietokoneet käyttävät yleisesti 8-bittistä tavua, monet tietokonevalmistajat tarjosivat käyttöön laajempia merkistöjä, joissa ylimääräiseksi jäänyt bitti otettiin käyttöön. Tällä tavoin ASCIIn mahdollistamien merkkien määrä kaksinkertaistui 128:sta 256:een. Näissä merkistöissä 128 ensimmäistä merkkiä vastasivat yleensä ASCIIta, mutta loput merkkipaikat voitiin omistaa esimerkiksi muiden kielten tarvitsemille kirjaimille. Eri tietokonevelmistajien laajennetut merkistöt olivat kuitenkin keskenään hyvin erilaisia.

Yhtenäisten 8-bittisten merkistöjen kehittämiseksi vuonna 1985 kehitettiin ISO 8859 -standardi, joka määritteli aluksi neljä laajennettua eurooppalaista merkistöä. Koska edes kaikkia eurooppalaisten kielten vaatimia kirjaimia ei voida mahduttaa 256 merkkiin, kielet oli jaoteltava alueittain ryhmiin, joista kullekin luotiin oma merkistö.

Merkistöjen välisistä eroista johtuu, että jos luetaan tekstitiedostoa, joka on tallennettu toisenlaisella merkistöllä, osa merkeistä korvautuu toisilla. Tällöin tekstiä voi olla vaikea tai mahdoton ymmärtää. Jos tiedoston alkuperäinen merkistö tunnetaan, tiedosto voidaan kääntää toisen merkistön mukaiseksi, mutta jos kohdemerkistössä ei ole käytössä samoja merkkejä kuin alkuperäisessä tekstissä, osa merkeistä voi hävitä. Kaikki ISO 8859 -merkistöt ovat kuitenkin yhteensopivia ASCIIn kanssa, joten numerot 0–9, kirjaimet A–Z ja a–z sekä tavallisimmat väli- ja erikoismerkit pysyvät aina samoina.

## ISO 8859 -merkistöt

ISO 8859 on ryhmä ISO-standardointielimen määrittelemiä merkistöjä. Merkistöjen numerointi on juokseva, eikä uudempi merkistö välttämättä ole aikaisempaa parempi tai korvaa sitä. Merkistön koko nimi sisältää standardin nimen, juoksevan numeron ja hyväksymisvuoden, esimerkiksi: *ISO/IEC 8859-15:1999*.

* Länsi-Eurooppaa varten määriteltiin ISO 8859-1 eli epävirallisesti Latin 1 (nimi johtuu siitä, että se perustuu latinalaisiin aakkosiin), joka sisältää lähes kaikki länsieurooppalaisten ja pohjoismaisten kielten kirjaimet. Siitä kuitenkin puuttuvat esimerkiksi suomessa joissain vierassanoissa esiintyvät Š/š ja Ž/ž, ranskan Œ/œ ja suuraakkonen Ÿ (sen sijaan pienaakkonen ÿ merkistöön sisältyy) sekä katalaanin Ŀ/ŀ. Latin 1 on usein oletusarvoisesti käytössä esimerkiksi HTML-kielessä, jos muuta ei ole määritelty.

* Itä-Euroopan kieliä varten määriteltiin ISO 8859-2 eli Latin 2, jolla voi kirjoittaa tšekkiä, unkaria, romaniaa, puolaa, kroatiaa, slovakkia ja sloveenia sekä serbiaa (latinalaisin aakkosin). Tässä merkistössä saksassa ja suomessa tarvittavat Ä/ä, Ö/ö, Ü/ü ja ß sijoitettiin samoihin paikkoihin kuin Latin 1:ssä, joten periaatteessa se soveltuu myös saksan ja suomen kirjoittamiseen (mutta ei ruotsin, koska merkistöstä puuttuu Å/å).

* Etelä-Eurooppaa varten määriteltiin ISO 8859-3 eli Latin 3, jolla voi kirjoittaa esperantoa, maltaa ja turkkia. Tämä merkistö on kuitenkin paljolti jäänyt pois käytöstä.

* Pohjois-Eurooppaa varten määriteltiin ISO 8859-4 eli Latin 4, jolla voi kirjoittaa viroa, latviaa, liettuaa ja grönlantia. Se soveltuu myös muiden pohjoismaisten valtakielten paitsi islannin kirjoittamiseen (ja suomen kirjoittamiseen oikeastaan paremminkin kuin Latin 1, koska siihen sisältyvät myös Š/š ja Ž/ž). Kirjainten Å/å, Ä/ä ja Ö/ö osalta Latin 4 on täysin yhteensopiva Latin 1:n kanssa.

* Kyrillistä aakkostoa varten määriteltiin ISO 8859-5, jolla voi kirjoittaa bulgariaa, valkovenäjää, makedoniaa, venäjää, serbiaa (kyrillisin aakkosin) sekä ukrainaa (ennen vuoden 1990 oikeinkirjoituksen uudistusta). Tämä merkistö ei ole kuitenkaan saavuttanut merkittävää suosiota, vaan käytetympiä ovat KOI8-muunnelmat ja Windowsin koodisivu 1251.

* Arabiaa varten määriteltiin ISO 8859-6, joka sisältää vain arabian perusaakkoston, eli sillä ei voi kirjoittaa persiaa tai urdua, vaikka nämä käyttävätkin pääosin samoja kirjaimia kuin arabia.

* Nykykreikkaa varten määriteltiin ISO 8859-7.

* Hepreaa varten määriteltiin ISO 8859-8 (joka sisältää vain konsonanttimerkit).

* ISO 8859-9 eli Latin 5 on lähes sama kuin Latin 1, mutta islannin kirjaimet Ð/ð, Ý/ý ja Þ/þ on korvattu turkkilaisilla kirjaimilla.

* ISO 8859-10 eli Latin 6 on uudelleenjärjestelty Latin 4, johon on lisätty myös Latin 5:stä poistetut islannin kirjaimet. Sitä voi käyttää Pohjoismaiden ja Baltian kielten lisäksi joidenkin saamelaisten kielten sekä grönlannin kirjoittamiseen. Kirjainten Å/å, Ä/ä ja Ö/ö osalta se on yhteensopiva Latin 1:n kanssa.

* ISO 8859-11 on määritelty thai-kieltä varten.

* ISO 8859-12 on hylätty ehdotus, joka lopulta korvattiin ISO 8859-14:llä.

* ISO 8859-13 eli Latin 7 on parannettu balttilainen merkistö.

* ISO 8859-14 eli Latin 8 on Latin 1:n muunnelma, johon on lisätty gaelin ja kymrin tarvitsemia kirjaimia, jotta sillä voisi kirjoittaa kaikkia kelttiläisiä kieliä.

* ISO 8859-15 eli Latin 9 (joskus myös Latin 0) on Latin 1:n muunnelma, johon on eräiden harvinaisten erikoismerkkien tilalle sijoitettu alkuperäisestä unohtuneita suomen ja ranskan kirjaimia (Š/š ja Ž/ž sekä Œ/œ ja Ÿ). Lisäksi valuuttamerkki ¤ on korvattu euron merkillä €.

* Uusin ISO 8859-16 on alun perin tehty romanian kielen oikeinkirjoitusta varten, mutta se soveltuu myös monille Etelä- ja Itä-Euroopan kielille ja sisältää lisäksi euron symbolin. Tällä merkistöllä voidaan kirjoittaa myös suomea, saksaa ja ranskaa, koska merkistöstä on pudotettu pois useita symboleja ja korvattu niitä kirjaimilla.

Uusia merkistöjä ISO 8859 -perheeseen ei ole enää tarkoitus kehittää, vaan sen sijaan toivotaan Unicoden vähitellen korvaavan muut merkistöt.

## Muut kahdeksanbittiset merkistöt

ISO-merkistöjen lisäksi on olemassa useita kansallisia ja epävirallisia merkistöjä. Näistä suosituimpia ovat KOI-8-muunnelmat, jotka ovat käytössä Itä-Euroopassa, kuten KOI8-R Venäjällä, KOI8-U Ukrainassa ja Bulgarian MIK. Myös vietnamin VISCII ja intialaisten kielten ISCII ovat tällaisia kahdeksanbittisiä merkistöjä.

Tämän lisäksi useilla valmistajilla on omia kielikohtaisia merkistöjään: Microsoftilla DOS- ja Windows-koodisivut, Applella MacRoman ja MacCyrillic, HP:lla HP-Roman8 jne.

Suosittu Microsoft Windows käyttää seuraavia merkistöjä (Windows-termistön mukaan *koodisivuja*), joista osa on standardin mukaisia, osa hieman muunnettuja ja osa omia:

* 1250 itäeurooppalainen (Latin 2)
* 1251 kyrillinen
* 1252 länsimainen (Latin 1:n muunnelma, jota virheellisesti saatetaan joskus kutsua Latin 1:ksi)
* 1253 kreikkalainen
* 1254 turkkilainen (Latin 5)
* 1255 heprealainen
* 1256 arabialainen
* 1257 balttilainen
* 1258 vietnamilainen
* 874 thai
* 932 japanilainen Shift-JIS
* 936 kiinalainen GBK (XGB)
* 949 korean laajennettu Wansung (KSC5601-1987)
* 950 kiinalainen (Taiwan, Hongkong) (Big5).

## Monitavuiset merkistöt

Kahdeksanbittinen koodaus ei riitä Itä-Aasian kielissä tarvittavien merkkien esittämiseen, joten siellä on jouduttu kehittämään oma tekniikka, jotta sikäläisiä kieliä ylipäätään voisi kirjoittaa tietokoneella. Nämä merkistöt sisältävät ASCII-merkkien lisäksi yleiset paikallisesti tarvittavat merkit, mutta eivät muiden Itä-Aasian kielten merkkejä tai eurooppalaisten kielten erikoismerkkejä.

Ensimmäinen tällainen merkistö oli japanilainen JIS X 0208, joka otettiin käyttöön jo 1978. JIS X 0208 oli ensimmäinen *monitavuinen merkistö*, jossa yhden merkin tallentamiseen käytetään useita tavuja tietokoneen muistissa. JIS X koostuu 94 × 94 merkin ruudukosta, johon voidaan määrittää 8836 merkkiä. Käytännössä merkit koodataan kahdella peräkkäisellä ASCIIn kirjoitusmerkillä. Merkistöstä on myöhempi versio JIS X 0212 (1990), joka lisäsi 5801 lähinnä nimissä käytettyä harvinaista kanji-merkkiä ja JIS X 0213 vuodelta 2000, jossa molempiin lisättiin lisää merkkejä.

Monitavuisen merkistön käsittely ja tiedon välittäminen voi olla vaikeaa, kun ohjelmat ja protokollat olettavat käytettäväksi kahdeksanbittistä merkistöä. Monitavuisten merkistöjen välittämiseksi on kehitetty koodauksia eri tarkoituksiin:

* EUC (*Extended Unix Code*) on koodaus, joka mahdollistaa ASCII-merkistön käyttämisen esimerkiksi Unix-komennoissa ja tiedostonimissä samaan aikaan monitavuisen merkistön kanssa. ASCII-merkit ovat ennallaan ja JIS X -merkistöjen merkit koodataan ylin bitti päällä.
* Japanilaisen ASCII-yhtiön kehittämä Shift-JIS on koodaus, joka on yhteensopiva paitsi ASCII:n myös JIS X 0201:n katakana-merkkien kanssa. Loput merkit koodataan erittäin monimutkaisilla merkkiyhdistelmillä.
* ISO-2022 määrittelee sarjan Esc-merkillä alkavia koodeja, joilla merkistöä voi vaihtaa kesken tekstin ja siten käyttää lomittain eri merkistöjä ja merkkejä.

Useissa Itä-Aasian maissa seurattiin Japanin esimerkkiä ja kehitettiin oma 94 × 94 -merkistö vastaavalla tekniikalla. Tällaisia ovat

* GB2312 - kiinan yksinkertaistetut merkit (Kiina)
* KS C 5601 - korea
* CNS 11643 - kiinan perinteiset merkit (Taiwan).

Näitä merkistöjä yhdistettyinä ISO-2022- tai EUC-koodaukseen käytetään yleisesti sähköposteissa ja niitä merkitään MIME-otsakkeissa tyypeillä ISO-2022-JP/CN/TW/KR.

Tosin Taiwanissa on yleisemmin käytetty Big5-merkistöä ja Hongkongissa tästä edelleen muunneltua omaa merkistöä HKSCS. Kiinan hallitus on määrännyt pakolliseksi GB 18030-2000 -merkistön tukemisen kaikissa Manner-Kiinassa myytävissä käyttöjärjestelmissä.

## Unicode

*Pääartikkeli: Unicode*
Koska merkistöjen runsaudesta huolimatta millään niistä ei voinut kirjoittaa montakaan kieltä yhteen tekstitiedostoon, kehitettiin monikielinen ratkaisu Unicode, jonka versio 5.2 sisältää yli 100 000 merkkiä. Niillä voidaan kirjoittaa suurinta osaa nykyään puhuttavista kielistä. Unicoden on tarkoitus sisältää kaikki merkit, jotka ovat sisältyneet toisiin merkistöihin, jotta muunnos Unicodeen olisi aina mahdollista tehdä. Kun ohjelmistotuki Unicodelle laajenee, suurin osa muista merkistöistä voidaan hylätä. Kuitenkaan ideogrammeja käyttäville kielille Unicode ei ole pystynyt tarjoamaan täyttä tukea, minkä vuoksi onkin yritetty kehittää kattavampia järjestelmiä, kuten TRON, UTF-2000 ja Giga Character Set.

Unicode-standardi ei määrittele yksittäiselle merkille tiettyä esitysmuotoa, vaan kiinteän koodiarvon. Standardissa on useita koodaustapoja, joista yleisimmät ovat vaihtelevatavuiset UTF-8- ja UTF-16- sekä kiinteätavuiset UCS-2- ja UCS-4-koodaukset.

## Lähteet

* Kahn, David: *The Codebreakers: The Comprehensive History of Secret Communication from Ancient Times to the Internet*.  New York (N.Y.):  Scribner, 1996.  ISBN 0-684-83130-9  (englanniksi)

### Viitteet