maanantai 9. helmikuuta 2009

Merkistöt

Hymiöviestini jälkeen aloin miettiä tarkemmin erikoismerkkien käyttöä. Aika vähän on tullut itse käytettyä muita kuin suoraan näppäimistöstä löytyviä merkkejä. Erikoisemmat merkit, joita olen tarvinnut, olen poiminut käyttöjärjestelmien ja tekstinkäsittelyohjelmien mukana tulevista merkkilistoista tai muualta. Useat merkit on kuitenkin helpompi ja nopeampi kirjoittaa käsin. Käyn nyt ensin läpi hieman länsimaisia ja japanilaisia merkistöjä. Sitten kerron hieman syventäviä ohjeita erikoismerkeistä. Varoitus: osa tekstistä voi mennä yli hilseen.

Kuivaa teoriaa
Vielä nykyäänkin on runsaasti käytössä "8-bittinen ASCII", jolla voidaan esittää 256 eri "merkkiä" (kaikki eivät ole tulostuvia - ns. kontrollimerkit). Oikeastaan yhtenäistä standardia ei ole olemassakaan, vaan merkkiasettelusta käytetään eri variaatioita (mm. ISO 8859-1 aka Latin-1). Windowsin vanhempia merkistöjä kutsuttiin nimellä "ANSI-koodisivut" ja tunnetuin oli (ei-standardi) Windows-1252, joka on pääosin yhteensopiva standardin ISO 8859-1 kanssa. Huomionarvoista on että Windows-version merkit 128-159 ovat tulostuvia, kun ne standardissa ovat kontrollimerkkejä. Uudistettu versio standardista on ISO 8859-15 (aka Latin-9), joka lisäsi muun muassa tuen €-merkille. Yhteistä näille kaikille merkistöille on, että 127 ensimmäistä merkkiä ovat samoja (standardi 7-bittinen ASCII). Noihin ensimmäisiin merkkeihin eivät sisälly mm. meidän ääkkösemme, mistä syystä ne aiheuttavat ongelmia monessa tilanteessa.

Koska vanhemmat merkistöt eivät olleet useinkaan yhteensopivia eikä niillä voitu esittää kaikkia merkkejä, kehitettiin standardi nimeltä Unicode. Unicode määrittää jokaiselle merkille yksiselitteisen tunnisteen muotoa U+[heksadesimaaliluku kuten 20AC]. Nykyään suositellaan käytettäväksi Unicodea aina kuin mahdollista ja useimmat ohjelmat sekä käyttöjärjestelmät sitä tukevatkin.

Tunnetuimmat Unicoden merkistökoodaukset ovat UTF-8 ja UTF-16. UTF-8:ssa parasta on, että se on täysin yhteensopiva perinteisen ASCII:n kanssa. Tarvittava tavumäärä vaihtelee merkin mukaan. Merkit 128-255 on kopioitu ISO 8859-1:stä ja tarvitsevat kaksi tavua, kun 8-bittisissä järjestelmissä riittää yksi. Tämä aiheuttaa ongelmia, jos koodaustapa ei ole ohjelman tiedossa (esim. ääkköset näyttävät kummilta). UTF-8 on onneksi helppo tunnistaa toisin kuin vanhemmat koodaukset. Muista koodauksista merkittäviä ovat UTF-16 ja sen edeltäjä UCS-2, jotka käyttävät vähintään kaksi tavua jokaisen merkin esittämiseen. Unicodeen liittyy usein myös termit BOM sekä little/big endian, jotka tarkoittavat tavujärjestystä (hieman hankala selittää eikä sillä tiedolla yleensä tee mitään). Nykyisessä Unicoden versiossa 5.1 on jo yli 100 000 merkkiä.

Japanilainen merkistö
Oli tarkoitus naputtaa erillinen blogikirjoitus japanin kirjoitusjärjestelmästä, mutta voin saman tien laittaa asiat lyhyesti (muutenhan tämä blogiviesti menee ihan aihepiirin ohi). Itse en edelleenkään osaa japania enempää kuin on päähän ponnistelematta tarttunut.

Monet varmaan tietävätkin jo, että japanissa on käytössä neljä kirjoitusmerkistöä: katakana, hiragana, kanjit ja neljäntenä latinalaiset kirjaimet (kutsuvat nimellä rōmaji). Hiragana ja katakana ovat tavumerkistöjä, joissa molemmissa on 46 erilaista merkkiä. Kiinasta aikoinaan varastettuja kanjeja puolestaan on laskettu olevan japanin kielessä noin 50 000 (tosin parilla tuhannella pärjää). Japanilaiset merkit voidaan romanisoida esim. Hepburn-järjestelmällä (tässä suomalainen transkriptio). Enemmän tietoa japanin kirjoitusjärjestelmästä löytää vaikkapa täältä ja täältä.

Japanissa käytettävistä koodauksista minulla ei ollut etukäteen paljoakaan tietoa. Tutkin asiaa ja vaikuttaisi tuo UTF-8 olevan nykyään laajasti käytössä sielläkin, vaikka alkuun sitä vastustettiinkin. Kanjit on Unicodessa ainakin osittain yhdistetty kiinalaisiin merkkeihin, mikä on ollut ongelmallista. Aiemmin käytössä oli mm. JIS-standardit, EUC-JP, ISO-2022-JP ja erityisesti Shift JIS. En ota oikein selkoa niiden eroista ja toiminnasta, joten ei enempää niistä.

Monissa käyttöjärjestelmissä, kuten Windows XP, eivät japanilaiset merkit näy oletuksena. Se johtuu siitä, ettei mukana tulevissa fonteissa ole kuvia merkeille. Tuolla on ohjeet laajennettujen fonttien asennukseen. Japanilainen näppäimistö näyttää yleensä tältä. Japanilaisia merkkejä voidaan kirjoittaa myös tavallisella näppäimistöllä. Osoitteesta KanjiKaveri.net löytyy selkeä ohje tähän. Tekstiä kirjoitetaan Hepburn-järjestelmän mukaan ja se sitten muuttuu kanoiksi ja IME:n (Input Method Editor) avulla saadaan aikaan kanjeja – helppoa ja hauskaa. Alkoi itseänikin taas kiinnostaa japanin opiskelun aloittaminen.

Erikoismerkit
Nyt osaamme jo kirjoittaa japaniakin, vaikka alkuperäinen ajatukseni oli tutkailla hieman länsimaisia erikoismerkkejä. Useimmat osaavat varmasti kirjoittaa näppäimistössään näkyvät merkit. Esimerkiksi tilde ~ kirjoitetaan painamalla AltGr+[enterin vieressä oleva näppäin] ja sitten välilyöntiä (AltGr ylhäällä). Samalla tavalla osan merkeistä saa helposti laitettua toisten merkkien päälle: óòöôõ. Näitä kutsutaan tarkkeiksi. Jokaisella merkillä on oma tunnistekoodinsa. Miksi sitten käyttää koodeja, kun voi kopioida taulukosta tarvitsemansa merkit? Mainitsin jo alussa, että koodien käyttö on nopeampaa ja helpompaa. Voi vaikka opetella joidenkin hyödyllisten merkkien koodit ulkoa, jolloin ne on nopea kirjoittaa tarvittaessa.

Näppäimistössä ei näy läheskään kaikki merkit. Esimerkiksi ISO-8859-1 sisältää myös muita mielenkiintoisia merkkejä. Windows-järjestelmissä on helppo tapa kirjoittaa nämä merkit: painetaan Alt pohjaan ja näppäillään erillisestä numeronäppäimistöstä luvun desimaalikoodi. Nyt joudutaan valitettavasti tarkemmin tekemisiin "koodisivujen" kanssa. Kokeilkaa itse: näppäilkää Alt+169 ja Alt+0169. Tässä tuli ® ja ©. Miksi ei tullut samat merkit? Nollan lisääminen eteen kertoo noita merkkejä kääntävälle ohjelmalle, että nyt käytetään Windowsin ANSI-koodisivua (yleensä 1252) ja ilman nollaa käytetään jotain muuta koodisivua (yleensä 850). Huomatkaa, että Windows-1252 sisältää ISO-8859-1:een kuulumattomia merkkejä välillä 128-159. Se aiheuttaa hieman yllättäviäkin ongelmia joskus, mutta yleensä nämäkin toimivat oikein.

Linux-puolella tuo Alt-kikka ei yleensä toimi, mutta siellä saattaa toimia parempi vaihtoehto: Ctrl+Shift+U ja sitten heksakoodi+välilyönti. Toimii jokaisessa Ubuntussa testaamassani ohjelmassa (en tiedä tuesta muilla alustoilla). Mac-koneista ei ole omaa kokemusta jaettavaksi. Huomatkaa, että Unicode-koodit kirjoitetaan yleensä heksadesimaalimuodossa, mutta joskus myös kymmenjärjestelmässä (muunteluun kelpaa vaikka tämä). Unicode-taulukko löytyy esim. täältä tai voi käyttää käyttöjärjestelmän mukana tullutta (Ubuntussa selkeämpi kuin Windowsissa).

Joissain ohjelmissakin on tuki Unicode-merkkien käsinkirjoitukseen. Esimerkiksi Windowsin WordPad:ssa ja MS Word:ssa voidaan kirjoittaa merkkikoodi (siis heksaosa) ja sen jälkeen painaa Alt+x, jolloin se muuttaa koodin merkiksi. Näissä toimii myös Alt + numeronäppäimistöstä Unicoden desimaaliarvo (ei toimi oikein muualla). Vim-editorissa Unicode-merkit kirjoitetaan Ctrl-v u ja heksadesimaalikoodi. Kaikki laajempia tekstinkäsittelyohjelmia (MS Word, OOo...) käyttäneet ovat varmaan huomanneet, että ne muuntelevat automaattisesti ja komennettuna joitain merkkejä. Tämäkin on ihan kätevää joskus, ja näitä muutoksia voi itsekin määrittää.

Tällä hetkellä eletään kiintoisia aikoja, koska uusi suomalainen näppäimistöasettelu on aivan nurkan takana. Se on laajennus nykyiseen näppäimistöasetteluun ja tuo paljon "uusia" merkkejä helposti saataville. Asettelua on päässyt kokeilemaan jo muutaman vuoden, mutta vasta nyt se on valmis ja varmaan lähiaikoina tulossa uusiin näppäimistöihin. Tästä kuvasta näkee sen tuomat uudistukset. Tarkkeita tulee lisää 12 ja lisäksi mm. astemerkki ja sitova välilyönti. Mielestäni merkittävin uudistus on ehkä ajatusviivan helpompi kirjoitus (AltGr+[viivanäppäin] riittää jatkossa).

Itse asiassa joissain käyttöjärjestelmissä on aiemminkin voitu ottaa käyttöön "compose-näppäin", jonka avulla voidaan yhdistää erikoismerkkejä näppäinyhdistelmiin. Vanhemmassa Ubuntussa (7.10) vaikuttaisi olevan sellainen oletuksena päällä, kun huomasin AltGr:n avulla saavani aikaan paljon erikoismerkkejä. Löysin tällaisen kuvan, joka vastaa suunnilleen tulosta. Tämä asettelu on jossain määrin yhteensopiva uuden kotimaisen kanssa, mutta vielä kattavampi. Testasin vielä uusimmalla versiolla (8.10) ja siinä vaikuttaisi oletuksena olla päällä tuon uuden kotimaisen mukainen asettelu. Linux on selvästi edelläkävijä merkistöasioissa.

On selitettävä vielä muutama käsite ja lähestymistapa, jotta hengentuotteeni on täydellinen. Yleensä ottaen rakenteisissa dokumenteissa (XML, HTML...) voidaan kirjoittaa erikoismerkit koodien tai niiden nimien avulla (jossain käytetään nimitystä entiteetti). HTML:ssä (ilman välejä kirjoitetut) merkinnät & # 165; & # xa5; ja & yen; tuottavat saman ¥-merkin. Heksadesimaalimuoto ilmoitetaan x:llä ja voidaan kirjoittaa myös vaikka & # x00A5;. Muista järjestelmistä esim. LaTeX on loistava erityisesti hankalampien matemaattisten kaavojen kirjoitukseen. Siinä kirjoitetaan erikoismerkit kauttaviivan \ avulla, kuten joissain ohjelmointikielissäkin. Esimerkiksi merkkijono x^{2} \geq 0 : \forall x\in\mathbf{R} tuottaa tulokseksi x² ≥ 0 : ∀ x ∈ ℜ (HTML:llä kirjoitettuna).

Alla on vielä joidenkin valitsemieni erikoismerkkien koodit ja nimet. Huomatkaa hakasulkeet, jotka kertovat ettei kyseessä ole standardin mukainen koodi (mutta sitä voi käyttää Alt-näppäimen kanssa). Listojen välit ovat kymmenkantajärjestelmässä, koska se on helpompi hahmottaa.

MerkkiDesi/heksaNimi
[128]/U+20ACEuro
[133]/U+2026Ellipsi
[134]/U+2020Risti
[149]/U+2022Luetelmapallo
[150]/U+2013Lyhyt ajatusviiva
¢162/U+00A2Sentti
¥165/U+00A5Jeni
©169/U+00A9Copyright
¬172/U+00ACNegaatio
°176/U+00B0Aste
±177/U+00B1Plus-miinus
²178/U+00B2Potenssi
·183/U+00B7Rivinkeskinen piste
×215/U+00D7Kertomerkki
÷247/U+00F7Jakomerkki
Д1044/U+0414Kyrillinen "de"
8594/U+2192Nuoli oikealle
9001/U+2329Vasen kulmasulje (oikea 〉 9002)

Symboleita (väli 9728-9906):
♥ ☺ ♪ ♀ ♂ ☼ ★ ☠ ☢ ☯ ☣ ☮ ☯
Matemaattisia merkkejä (väli 8704-8959):
∀ ∂ ∃ ∇ ∈ ∑ √ ∞ ∠ ∫ ∧ ∴ ≈ ≠ ≤ ⊂ ⋃ ⋯
Kreikkalaisia kirjaimia (väli 913-974):
Δ Π Φ Ω α β γ ε θ λ ξ ψ ω

Jos ette saa jotain merkkiä näkyviin, syy on yleensä valitsemassanne fontissa tai sitten merkistökoodaus on väärä. Testailkaa merkkien näkyvyyttä vaikka tämän sivun avulla. Erikoismerkkejä ja niiden entiteettejä löytyy hieman enemmän täältä. Jukka Korpela on muutenkin kirjoittanut aiheesta hyviä oppaita, joita tässäkin hyödynsin.

Selitän lopuksi suosikki-ilmeeni (°Д°) kirjoittamisen. Windowsin WordPad:ssa naputetaan esim. ( Alt+0176 414+Alt+x Alt+0176 ). Ubuntussa taasen esim. ( Ctrl+Shift+U 00B0 C+S+U 414 C+S+U 00B0 ). Uuden näppäimistöasettelun asentaneet voivat kirjoittaa asteen AltGr+Shift+0. Vaihtoehtona tietysti kopioida tuo ilme suoraan jostain, mutta osaattepahan nyt kirjoittaakin sen.

...tulipas nörtähtävä teksti kirjoitettua. IT-alalla on lähes välttämätöntä tietää näistä asioista jotain ja opin itse paljon lisää tätä naputtaessani. Olin ajatellut aiemminkin selvittää näitä asioita itselleni, mutta vasta nyt löytyi tarpeeksi motivaatiota. Ei tällaisia tekstejä jaksa ihan jatkuvasti kirjoittaa, joten seuraavat tekstit ovat varmaan kevyempiä. Tässä on muutama muukin teksti ollut tuloillaan, mutta katsoo nyt, milloin nekin saan valmiiksi.

Ei kommentteja:

Lähetä kommentti