Tämä luku käsittelee erilaisten merkkien (characters) sisällyttämistä Web-sivuille. Mitä laajempaa merkkivalikoimaa tarvitset, sitä vaikeammiksi hommat käyvät.
"Turvallisia" merkkejä datan käsittelyssä ja siirrossa ovat oikeastaan vain Ascii-merkit, ja niistäkin joihinkin liittyy ongelmia eri yhteyksissä.
Seuraava taulukko esittää Ascii-merkistön kirjoittuvat merkit; HTML:n kannalta ongelmalliset merkit ovat korostettuina:
! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~
Kyseisiin ongelmallisiin merkkeihin liittyvät seikat ovat ratkaistavissa helposti:
" |
Voidaan yleensä kirjoittaa sellaisenaan, mutta
määritteiden
arvoissa (lainausmerkkien sisällä)
käytetään merkintää
"
(esimerkki: title="Jukka "Yucca" Korpela"
|
---|---|
& |
kirjoitetaan
&
silloin, kun halutaan
sisällyttää &-merkki itse dataan (esim. R&D
näkyy muodossa R&D)
|
< |
kirjoitetaan
<
silloin, kun halutaan
sisällyttää <-merkki itse dataan (esim. a<b
näkyy muodossa a<b)
|
> |
kirjoitetaan
>
silloin, kun halutaan
sisällyttää >-merkki itse dataan
|
Sääntöjen syynä on se, että kyseisiä merkkejä käytetään itse HTML-kielen rakenteiden erottamiseen tekstistä. Niinpä tarvitaan jokin keino (ns. escape-mekanismi), jolla niitä tarvittaessa voidaan sisällyttää itse tekstiin.
Edellä esitetty Ascii-merkistö ei tietenkään riitä esimerkiksi suomen kielen kirjoittamiseen, vaan tarvitaan lisäksi ä- ja ö-kirjaimet. Nekään eivät käytännössä yleensä tuota ongelmia Suomen oloissa nykyisin; yleensä ne löytyvät suoraan näppäimistöltä tai ovat ainakin kirjoitettavissa jollain näppäintemppuilulla.
Tarvittaessa kuitenkin
ä, ö, Ä ja Ö voidaan esittää merkinnöillä
ä
,
ö
,
Ä
ja
Ö
. Silloin tosin
HTML-dokumenttia on ikävä lukea sitä editoitaessa.
Kyseisten merkintöjen käyttö ei tarjoa mitään etua paitsi
erikoisissa poikkeustilanteissa,
esim. kun
dokumentin koodauksena on
Yleisemmin HTML:ssä voidaan suhteellisen turvallisesti käyttää koko ISO Latin 1 -merkistöä. Tämä merkistö on länsi- ja pohjoiseurooppalaisia kieliä varten kehitetty. Tarkemmin siitä kertoo kirjoitukseni ISO-Latin-1-merkistöstä. Seuraavassa on kaikkien ISO Latin 1 -merkkien taulukko, jossa kukin merkki toimii linkkinä merkin yksityiskohtaiseen (englanninkieliseen) kuvaukseen dokumentissa The ISO Latin 1 character repertoire - a description with usage notes:
! | " | # | $ | % | & | ' | ( | ) | * | + | , | - | . | / | |
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | : | ; | < | = | > | ? |
@ | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O |
P | Q | R | S | T | U | V | W | X | Y | Z | [ | \ | ] | ^ | _ |
` | a | b | c | d | e | f | g | h | i | j | k | l | m | n | o |
p | q | r | s | t | u | v | w | x | y | z | { | | | } | ~ | |
¡ | ¢ | £ | ¤ | ¥ | ¦ | § | ¨ | © | ª | « | ¬ | | ® | ¯ | |
° | ± | ² | ³ | ´ | µ | ¶ | · | ¸ | ¹ | º | » | ¼ | ½ | ¾ | ¿ |
À | Á | Â | Ã | Ä | Å | Æ | Ç | È | É | Ê | Ë | Ì | Í | Î | Ï |
Ð | Ñ | Ò | Ó | Ô | Õ | Ö | × | Ø | Ù | Ú | Û | Ü | Ý | Þ | ß |
à | á | â | ã | ä | å | æ | ç | è | é | ê | ë | ì | í | î | ï |
ð | ñ | ò | ó | ô | õ | ö | ÷ | ø | ù | ú | û | ü | ý | þ | ÿ |
Jos käytät esim. Mac-tietokonetta, niin käytössä oleva merkkikoodi on eri kuin ISO Latin 1. Tästä ei kuitenkaan yleensä aiheudu ongelmia, jos dokumentin siirto Macistä Web-palvelimeen tehdään oikein, esim. FTP:llä tekstimoodissa, jolloin tapahtuu automaattinen merkkikoodimuunnos.
Toisaalta suurelle osalle Maciä käyttävistä
lukijoista aiheuttaa ongelmia se, että
monet Macissä
toimivat selaimet eivät vieläkään osaa näyttää kaikkia
ISO Latin 1
ISO Latin 1 -merkkien
kirjoittamiseen joudutaan
yleensä käyttämään erityisiä ohjelmakohtaisia menetelmiä,
koska missään näppäimistössä tuskin on niitä kaikkia.
Tyypillisen PC-näppäimistön osalta ks. ohjetta
Erikoismerkkien
kirjoittaminen suomalaisella PC-näppäimistöllä.
Yleisesti aiheesta kertoo
A tutorial on character code issues,
kohta
Typing characters, mutta
tässä kerrottakoon yksi hyvin yleisesti käytetty menetelmä:
Windows-järjestelmissä lähes kaikissa ohjelmissa (ei kuitenkaan
Emacsissa) voi käyttää ns.
Alt-0nnn-menetelmää:
Paina Alt-näppäin (välilyöntinäppäimen vasemmalla puolella) alas ja, pitäen
sitä alhaalla, kirjoita erilliseltä numeronäppäimistöltä (oikealla)
merkki 0 (nolla) ja halutun merkin kolminumeroinen desimaalinen koodi
nnn. Koodit voit katsoa
esim. dokumentista
Taulukko ISO-Latin-1:n merkeistä ja niiden nimistä.
Vastaavat tiedot ovat monella muullakin Web-sivulla, mutta
ole tarkkana: muista käyttää
desimaalisia koodeja ja
olla käyttämättä koodiarvoja 127 - 159,
sillä ne eivät kuulu ISO Latin 1:een.
Esimerkiksi espanjan kielessä käytetty ñ-merkki (n-kirjain, jonka
päällä on tilde, "aaltoviiva") voidaan Windowsissa kirjoittaa näppäilemällä
Alt-0241.
Yksi vaihtoehto on kirjoittaa ñ
, mutta
silloin sinun on itsesi vaikea lukea, mitä kirjoitat, vaikka se kyllä
selaimissa toimii. Lähes yhtä vaikea on lukea
"symbolisia" merkintöjä kuten ñ
,
vaikka ne ovatkin vielä yksi (ja aina käytettävissä
oleva, ohjelmasta riippumaton) vaihtoehto.
Tyypillisellä
Suomessa käytettävällä PC-näppäimistöllä onnistuu
aksentillisten kirjainten kuten é kirjoittaminen
usein myös näppärällä ja helposti muistettavalla tavalla:
käyttäen apuna näppäimistön paria erikoisnäppäintä, joita voi
sanoa aksenttinäppäimeksi ja diereesinäppäimeksi.
Jos näpäytät ensin aksenttinäppäintä, johon on merkitty
akuutti aksentti ´ ja sen yläpuolelle graavi aksentti `,
ja sitten vaikkapa e-näppäintä, saat aikaan akuutilla aksentilla
varustetun kirjaimen é. Tekemällä samoin mutta shift-näppäin
alhaalla silloin, kun näpäytät aksenttinäppäintä, saat aikaan
graavilla aksentilla varustetun kirjaimen è. Vastaavasti
saat diereesinäppäimellä, jossa on ¨ ja ^, aikaiseksi
diereesillä (kahdella pistellä, umlautilla) tai sirkumfleksilla
varustettuja merkkejä kuten ü ja û sekä vielä Alt Gr
ISO Latin 1 ei sisällä hattu-s:ää
eikä hattu-z:aa, jotka
kuuluvat suomen viralliseen kirjoitusjärjestelmään.
yleensä on parasta HTML-dokumenteissa toistaiseksi käyttää niiden
asemesta merkkipareja sh ja zh.
Jos kuitenkin pidät tärkeämpänä sitä, että useat näkevät sivusi
niin, että sillä on oikea hattu-s ja hattu-z, kuin sitä, että
kaikki voivat lukea sivusi, käytä seuraavia merkintöjä:
š
(pieni hattu-s),
Š
(iso hattu-s),
ž
(pieni hattu-z) ja
Ž
(iso hattu-z).
Euron merkkiä ei myöskään kannata käyttää;
on paljon turvallisempaa käyttää sanaa "euro" sopivassa
taivutusmuodossa kuin sinänsä oikeaa esitysmuotoa
€
.
Huomaa myös, että ajatusviiva ei kuulu
ISO Latin 1:een eikä ole turvallisesti esitettävissä,
vaikka se kuuluukin ns. Windows-merkistöön. (Tai oikeammin sanoen
siihen kuuluu kaksi erimittaista viivaa, "em dash" ja "en dash".)
Sama koskee ns. "oikeita" lainaus-
ja heittomerkkejä.
On parasta tyytyä toistaiseksi käyttämään yhdysmerkkiä ajatusviivan
asemesta sekä "pystysuoraa" (Ascii-merkistön)
lainausmerkkiä (") ja heittomerkkiä (').
Ks. kirjoitustani
Mikrojen merkistöjen aiheuttamista ongelmista Webissä.
Valitettavasti muiden kuin ISO Latin 1 -merkkien käyttö Webissä aiheuttaa huomattavia ongelmia. Niiden vaikeusaste vaihtelee, ja aloitamme helpoimmista. Ensin kuitenkin yleisiä huomautuksia.
Hieno esitys | Kun menee pieleen |
---|---|
![]() |
![]() |
Harkitse, selviäisitkö kuitenkin
ISO Latin 1:llä. Yhdenkin sen ulkopuolisen merkin ottaminen mukaan
aiheuttaa ongelmia. Olisi kyllä hienoa ja korrektia, jos voisi kirjoittaa
esimerkiksi Lech Walesan nimen tarkasti oikein, puhua
alfa Centaurista kreikkalaista kirjainta käyttäen ja
viitata Laplacen operaattoriin nablamerkillä.
Mutta maksaako se vaivan, jos merkittävä osa lukijoista - ehkä
jopa enemmistö - näkee hienot merkkisi outoina vänkyröinä,
kysymysmerkkeinä, laatikoina tai oikeannäköisinä mutta väärinä
merkkeinä?
Seuraavassa on edellä mainittuja merkkejä
sisältäviä ilmaisuja, jotta voit nähdä, miten sinun
selaimesi niistä selviää
(ja ohessa on kuvat kahdesta muusta esitysmuodosta):
Lech Wałęsa,
α Centauri,
∇F.
On tärkeää, miten laajaa merkkivalikoimaa tarvitset. Toinen tärkeä kysymys on, miten olennaiseen käyttöön niitä tarvitset. Jos esimerkiksi jutussasi puhutaan Lech Walesasta, ei ole viestinnän onnistumiselle välttämätöntä, että saat l- ja e-kirjaimeen oikeat lisukkeet. Mutta jos koko juttusi on puolankielinen, tilanne on aivan toinen: tarvitset merkkivalikoiman, jolla puolaa voi kirjoittaa normaalisti. Vastaavasti jos juttusi käyttää yksikköä ohmi, on tuskin välttämätöntä, että voi käyttää oikeaa ohmin tunnusta eli isoa oomegaa (Ω). Jos taas tekstisi vilisee kreikankielisiä sitaatteja taikka matemaattisia erikoissymboleita, joudut yleensä hyväksymään sen, että kaikki eivät voi lukea sitä kunnolla.
Käytännössä keskeistä on, selviätkö jollakin ns. kahdeksanbittisellä merkistöllä. Sellaisessa merkistössä on periaatteessa 256 merkkipaikkaa, joista käytännössä yleensä puolet on kaikissa merkistöissä samoja, nimittäin Ascii-merkit. Loppuosastakin useat positiot on varattu kontrollikoodeille, joten käytännössä vaihtoehtoja on vain noin 100 merkin osalta. Esimerkiksi
Joka tapauksessa joudut huolehtimaan merkkien koodausta koskevan informaation lähettämisestä selaimelle. Esimerkiksi ISO 8859-2 -koodatussa tekstissä mikään itse tekstissä ei kerro koodausta, siis siitä, miten mikin data-alkio pitää tulkita. Periaatteessa sama ongelma on ISO Latin 1:n kanssa, mutta käytännössä ISO Latin 1 on varsin pitkälle oletusarvo selaimissa.
Kyseinen informaatio tulisi Web-palvelimen lähettää selaimelle. Tapa, jolla asia hoidetaan, on palvelinkohtainen. Ks. yleisiä ohjeita asiasta pienoisoppaassa Laajennetun merkistön käyttö HTML:ssä.
Aloitamme ehkä helpoimmasta tapauksesta: edellä mainitusta ISO 8859-2:sta. Miten voisimme kirjoittaa esimerkiksi puolankielisen HTML-dokumentin? Unohdetaan tässä kielivaikeudet ja keskitytään merkistöongelmiin. Puolan merkistössä tarvitaan meille tuttujen kirjainten ohella eräitä merkkejä, joissa tavalliseen kirjaimeen on liitetty lisuke kuten poikkiviiva.
Käsittelemme ensin erästä tapaa, joka on ehkä enemmänkin eräitä periaatteita valaiseva kuin käytännöllinen. Voisimme menetellä niin, että kirjoitamme dokumentin muutoin aivan tavalliseen tapaan mutta käyttäen vain Ascii-merkkejä sekä ä:tä ja ö:tä, ja puolassa tarvittavat kirjaimet otamme ISO 8859-2:sta siten, että katsomme vertailutaulukosta, mitkä ovat koodinumeroiltaan vastaavat merkit ISO Latin 1:ssä. Esimerkiksi l-kirjainta, jossa on poikkiviiva, vastaa tässä mielessä yläindeksi ³ ja e-kirjainta, jossa on koukku alhaalla, vastaa e, jossa on sirkumfleksi (ê). Nyt sitten vain kirjoitamme nuo merkit jollakin edellä kuvatuista tavoista; näin kirjoitettuna esimerkiksi Walesa-nimestä tulee Wa³êsa. Tämähän ei hyvältä näytä, mutta jos palvelin pannaankin ilmoittamaan koodaukseksi ISO 8859-2 ja selain tämän ymmärtää ja sillä vielä on sopiva fontti käytössään, niin hommahan pelaa (ei aina, koska selaimissa on vielä puutteita, mutta jo useimmiten).
Tämä voi kuulostaa huijaukselta ja sekoilulta, mutta merkkikoodiasioiden perusteiden pohjalta sen ehkä voi ymmärtää ja samalla se kenties havainnollistaa koodiasioita: se, miltä tiedosto näyttää esimerkiksi editorissa, riippuu täysin siitä, minkälaisen koodauksen mukaisesti ohjelma tulkitsee tiedoston sisällön merkeiksi. Ja joka tapauksessa ISO 8859-2 sopii hyvin moniin tarkoituksiin. Luonnollisestikin on parempi, jos voi käyttää sellaista editoria, joka suoraan näyttää merkit oikein.
Hankala kysymys
on, pitäisikö dokumenttiin kirjoittaa
myös meta
-elementti, joka ilmoittaa koodauksen, esim.
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
Periaatteellisesti se on epälooginen, münchhausenmainen ratkaisu -
dokumentti yrittää kertoa oman koodauksensa, ja tämän se tietysti tekee
tekstillä, mutta
miten tekstiä voi lainkaan tulkita tietämättä koodausta?
Käytännössä se voi aiheuttaa
ongelmia. Mutta tässä yhteydessä olen noita
meta
-elementtejä käyttänyt. Syynä on lähinnä se, että
muutoin paikalliset kopiot dokumenteista eivät toimi oikein.
Jos lukija on imuroinut aineiston omaan koneeseensa ja lueskelee sitä
siellä, niin tietenkään mikään palvelin ei ole lähettämässä informaatiota
koodauksesta!
ISO 8859-2:ta käsittelee laaja sivusto, joka nimestään Latin 2 Fonts huolimatta käsittelee monia muitakin asioita kuin fontteja (kirjasintyyppejä), mm. näppäimistö- ja ohjelmistoasioita.
Huomaa, että edellä ei ole puhuttu mitään fonteista. Eikä ole syytäkään. Toki on hyvä, jos sivun tekijällä on käytössään fontti, jonka ansiosta hän näkee merkit oikein. Mutta kuten esimerkki osoitti, se ei periaatteessa ole välttämätöntä. Lukija tarvitsee koneeseensa jonkin fontin, jossa on tarvittavat merkit. Mutta itse HTML-dokumentissa ei tarvitse eikä yleensä ole syytäkään sanoa mitään fonteista.
Yleisempi ratkaisu on käyttää jotakin sopivaa ohjelmistoa,
joka helpottaa kirjoittamista ja jolla voidaan kirjoittaa useita
eri kieliä.
Ks. Alan Woodin
koostetta
Unicode and Multilingual Editors and Word Processors.
Tässä mainitaan vain eräs
vaihtoehto Windows-koneisiin:
UniPad,
joka on laajaa merkkivalikoimaa tukeva tekstieditori.
Apuohjelmana voi käyttää
Free recodea, joka on yleisohjelma merkkikoodien välisiin
muunnoksiin.
Täten voisi esimerkiksi kirjoittaa UniPadillä
dokumentin, jossa on suomea ja venäjää, tallentaa sen UTF-8-muodossa
kyseisestä ohjelmasta ja muuntaa Free recodella esimerkiksi
koi8-r-muodoon, joka lienee venäjänkielisten sivujen tavallisin koodaus.
Muunnos tapahtuisi (komentoikkunassa)
seuraavaan tapaan:
cp test.utf test.koi
recode utf-8..koi8-r test.koi
Palvelimeen voidaan sitten siirtää haluttaessa molemmat versiot
(test.utf
ja test.koi
) ja tarvittaessa
nimetä ne sopivalla tavalla. Palvelinkohtaisilla järjestelyillä on
sitten hoidettava, että palvelin lähettää oikean informaation koodauksesta.
Seuraavat linkit viittaavat demosivuun kahtena eri versiona:
UTF-8-testisivu ja
KOI8-R-testisivu. Nämä sitten
saattavat toimia selaimessasi tai olla toimimatta.
Tässä tapauksessa dokumentteihin on vielä "käsin"
lisätty meta
-tägit, jotka ilmoittavat koodauksen.
Kuten edellä mainittiin, sellainen
ei yleensä ole aiheellista. Tämä esimerkki havainnollistaa osaltaan,
miksi näin on. Jos dokumentin koodausta muutetaan, niin myös
sellaiset meta
-tägit pitäisi muuttaa, mutta tätä
taas merkkikoodinmuunnosohjelmat eivät suinkaan tee - niiden
tehtävähän on operoida koodauksen tasolla, oli data millaista tahansa,
eivätkä ne esim. tunnista HTML-merkkausta.
UniPadistä voidaan myös suoraan tallentaa esim. koi8-r-koodattuna, kunhan käytetään sen Export-valikkoa. Edellä oleva menettely oli siis turhan mutkikas yksinkertaisiin tilanteisiin mutta toisaalta havainnollistaa sitä, että ei ole kovinkaan vaikeaa tehdä sivusta versioita, joissa on eri koodaus. Sellainen vaihtoehtoisuus voi olla eduksi, koska osalle lukijoista sopii teknisten syiden takia yksi koodaus, osalle toinen.
Kreikan kirjoittamiseen voidaan käyttää nykykreikan osalta koodausta ISO 8859-7 tai windows-1253, joiden ero on suhteellisen pieni. Ns. polytoninen kreikka, jossa on useita erilaisia painomerkkejä, vaatiikin sitten jo käytännössä Unicoden käyttöä (ja lisäksi lukijoiden todennäköisesti pitää jostain löytää sopiva fontti).
Matemaattisten merkkien käyttö, matemaattisista lausekkeista puhumattakaan, on varsin ongelmallista HTML:ssä. Edellä kuvattu ISO Latin 1 sisältää vain muutaman matemaattisen merkin. Merkkivalikoiman laajentaminen on mahdollista seuraavassa kohdassa kuvattavalla tavalla, joskin silloin lisääntyy niiden lukijoiden määrä, jotka eivät näe sivua oikein. Vielä ongelmallisempaa on, että varsinaisia kaavoja ja lausekkeita varten HTML:ssä ei ole merkkausta.
Niinpä yleensä käytetään sellaista menettelyä,
että kaavat tuotetaan kuvamuotoon esim.
TeX-ohjelmistolla
ja upotetaan HTML-dokumenttiin
img
-elementillä.
Menettelyä käytetään mm.
CSC:n
opasaineistossa sekä laajassa
MathWorld-tietosanakirjassa.
Jossain määrin, melko yksinkertaisissa tapauksissa, on kuitenkin mahdollista käyttää HTML:ää matemaattisten kaavojen esittämiseen. Ks. Math in HTML (and CSS). Tässä vain pikku esimerkki (joka ei välttämättä toimi selaimellasi):
√(a²+b²)
Periaatteessa HTML:ssä voi käyttää koko Unicode-merkistöä, tai vieläkin periaatteellisemmin sanoen vieläkin laajempaa merkistöä (Universal Character Set, UCS). Vaihtoehtoja on olennaisesti kaksi:
š
.
Tällöin voidaan käyttää mitä hyvänsä editoria, koska
dokumentin kirjoittamiseen voidaan käyttää hyvinkin
suppeaa merkistöä, vaikka dokumentin varsinaisessa sisällössä
voikin olla hyvinkin laaja merkistö.
Tällöin sivuntekijä yleensä joutuu jossain mielessä tekemisiin
koodiarvojen kanssa.
Menettely voi sopia silloin, kun esim. englanninkieliseen
dokumenttiin tarvitaan muutamia erikoismerkkejä.
Apuneuvoja:
How to find an
&#
number;
notation for a character ja
gwrite - a virtual keyboard program.
Näitäkin asioita on selostettu hiukan tarkemmin edellä mainitussa ohjeessa Laajennetun merkistön käyttö HTML:ssä. Suomeksi merkistöasioiden keskeisiä kysymyksiä käsittelee myös Markku Immosen esitys merkistöistä Webissä.