HTML-dokumenteissa voi käyttää muitakin kuin tavallisia ns. Latin-1-merkkejä, esimerkiksi kreikkalaisia tai kyrillisiä kirjaimia ja matemaattisia symboleita. Tällä alalla on kuitenkin suuria ongelmia, siitä huolimatta, että HTML:n ja HTTP:n määrittelyt tarjoavat useitakin tapoja käyttää laajoja merkkivalikoimia. Tämän katsauksen tavoitteena on valita - määrittelyjen mukaisten vaihtoehtojen joukosta - sellainen tapa, jolla saavutetaan mahdollisimman hyvä toimivuus nykyisin suosituimmilla selaimilla kuten Netscape ja Internet Explorer.
English version: Using national and special characters in HTML. (Suomenkielisen version nimi poikkeaa englanninkielisestä sisällöltään, koska suomen kansallisten merkkien käyttö on mahdollista Latin-1:n puitteissa, joten tässä käsiteltävät ongelmat eivät tule esille, jos dokumentissa käytetään vain suomea, ruotsia, englantia ja muita ns. länsi- ja pohjoiseurooppalaisia kieliä, ellei sitten haluta käyttää Latin-1:een kuulumattomia merkkejä kuten hattu-s:ää ja ajatusviivaa.)
Tässä kuvataan aluksi merkkivalikoiman suhteen yleispätevä tapa; sitä käyttäen voi dokumenttiin kirjoittaa mitä tahansa merkkejä. Koska tämä tapa on jossain määrin mutkikas, kannattaa harkita yksinkertaisia tapoja, jos tarvitaan vain rajallista merkkivalikoimaa kuten Ascii-merkkien lisäksi kyrillisiä tai kreikkalaisia kirjaimia.
Sisältö:
Tämä dokumentti pyrkii selostamaan asioita olettamatta lukijalta aiempaa tietämystä merkkikoodiongelmista. Mutta voi olla tarpeen katsoa tekijän oppaasta A tutorial on character code issues tietoja käytetyistä termeistä sekä eri merkkikoodeista.
Vaikka tässä kuvatut tavat ovat täysin spesifikaatioiden mukaisia, selainten tuki niille on vielä melko huono. Mikä pahempaa, jos selain ei tue käytettyä tapaa, lukija näkee jotain, joka voi näyttää pelkältä sotkulta, kuten merkintä α alfa-kirjaimen tilalla.
Jos siis tarvitset esimerkiksi vain muutamia sellaisia latinalaisen kirjaimen ja tarkemerkin (diakriittisen merkin) yhdistelmiä, jotka eivät kuulu Latin-1:een, saattaa olla parempi välttää ongelma jättämällä tarkkeet pois (ja kenties lisätä tekstiin pahoittelu siitä, että nimeä ei voi esittää aivan oikein). Ja jos tarvitaan vain muutamia kreikkalaisia kirjaimia matematiikan tai fysiikan symboleiksi, niin on ehkä parasta käyttää niiden tilalla sanoja kuten "alfa" tai "oomega" (tai "ohmia", merkityksen mukaan).
Varoitus:
Näyttää siltä, että IE 4 voi toimia väärin, kun dokumentissa on
linkkejä, jotka sisältävät #
-merkin
(siis linkkejä saman dokumentin muihin kohtiin tai muiden dokumenttien
erityisiin kohtiin), jos dokumentin koodaukseksi ilmoitetaan
UTF-8 siten kuin kohdassa 3 jäljempänä kerrotaan
(tai meta
-elementtiä käyttäen).
Tämän IE:n virheen takia on ehkä parempi olla ilmoittamatta koodaukseksi
UTF-8:aa (joka tarvittaisiin vain Netscapen virheen takia!).
Seuraava menetelmä, jota Alan J. Flavell on ehdottanut "konservatiivisena vaihtoehtona" kirjoituksessaan I18n Quickstart, on spesifikaatioiden mukainen ja sallii periaatteessa koko Unicode-merkistön käytön:
&#
luku;
olevia numeerisia viittauksia, missä
luku on merkin
koodinumero (koodipositio)
Unicodessa,
kymmenjärjestelmän mukaan esitettynä.
Content-type: text/html;charset=utf-8
Tämän voi toivoa toimivan Netscapella versiosta 4 alkaen ja Internet Explorerilla samoin versiosta 4 alkaen ainakin jos niiden asetukset ovat sopivat. Jos arvelet, että lukijasi saattavat tarvita ohjeita tästä etkä ole löytänyt parempaakaan dokumenttia, johon viitata, voit käyttää seuraavanlaista linkkiä:
<P>Tämä dokumentti sisältää merkkejä, jotka voivat aiheuttaa ongelmia ja vaatia (tilapäistä) <a title="Tietoja selainten asetuksista laajoja merkistöjä varten" href="HTML/chars.var#browsersettings"> selaimen asetusten muuttamista</A>.</P>
Voit testata oman selaimesi asetuksia katsomalla sillä dokumenttia, joka sisältää kreikkalaisia, kyrillisiä ja ns. laajennetun latinalaisen merkistön kirjaimia.
Koodinumeroiden käytössä on otettava huomioon, että
Unicode-merkistökartat
ja useimmat muutkin vastaavat kuvaukset esittävät merkkien
koodipositiot
heksadesimaalisessa
(16-kantaisessa) lukujärjestelmässä.
Ne on muunnettava kymmenjärjestelmään.
(Periaatteessa
HTML:n nykyinen määrittely
sallii sellaisetkin numeeriset viittaukset, joissa koodinumerot
ovat heksadesimaalisia, mutta tälle piirteelle ei käytännössä
vielä ole tukea.)
Erillinen dokumentti
How to find an
&#
number;
notation for a character kertoo eräistä
tavoista selvittää, mikä on minkin merkin koodinumero.
Koodinumeroiden selvittäminen ja käyttäminen on tietenkin hankalaa ja virhealtista. Jos tarvitaan vain muutamia erikoismerkkejä, tämä on siedettävää, mutta jos tarvitset suurta määrää muita kuin Ascii-merkkejä, yritä löytää sopiva apuohjelma, joka lukee sellaista dataa jossakin sopivassa muodossa ja muuntaa sen siihen merkintätapaan, josta tässä on kyse. (Katso esimerkiksi yksinkertaista C-ohjelmaa, joka muuntaa Latin-1:stä numeerisiksi viittauksiksi.)
Tätä menetelmää käytettäessä Latin-1-merkit ovat samassa asemassa kuin muutkin ei-Ascii-merkit; niitä, esimerkiksi ä:tä ja ö:tä, ei tässä yhteydessä saa kirjoittaa sellaisinaan.
Periaatteessa voitaisiin käyttää muotoa
&
nimi;
olevia symbolisempia merkintöjä numeeristen viittausten
&#
luku;
asemesta
monille merkeille,
esimerkiksi merkintää
α
merkinnän α
asemesta.
Toistaiseksi kuitenkin selainten tuki tällaisille ns.
merkkientiteeteille on suhteellisen vähäinen, paitsi
Latin-1-merkkejä vastaaville entiteeteille.
Asetusten hoitaminen siten, että
palvelin
lähettää otsakkeen
Content-type: text/html;charset=utf-8
saattaa olla vaikein asia selvitettäväksi tässä yhteydessä.
Asia on palvelinkohtainen, joten voi olla tarpeen perehtyä
paikallisen Web-palvelimen ylläpidon tarjoamiin tietoihin;
ylläpidon tulisi olla tavoitettavissa muotoa
webmaster@
palvelin olevasta meiliosoitteesta.
Esimerkiksi eräässä yleisesti käytetyssä
palvelinohjelmassa,
Apachessa
(samoin kuin
NCSA HTTPd AddType
-direktiiviä
(katso Apachen modulin
mod_mime
dokumentaatiota ja esimerkkejä TKK:n
Web-ohjeissa).
Jos esimerkiksi päättäisit nimetä kaikki tässä kuvattua tapaa
käyttäen kirjoitetut tiedostot siten, että niiden nimet loppuvat merkkeihin
.htm8
, niin tarvitsisit rivin
AddType text/html;charset=utf-8 htm8
tiedostoon nimeltä .htaccess
(huomaa piste alussa!)
siihen hakemistoon, jossa tiedostot ovat.
(Voit toki käyttää muutakin merkkijonoa kuin
htm8
. Jopa html
kävisi, jos olet järjestänyt asiat niin, että kaikki
.html
-tiedostot kyseisessä hakemistossa
sopivat lähetettäviksi sellaisen informaation kera, että niiden
koodaus on
charset=utf-8
.)
Dokumentissa The HTTP charset parameter on tietoja koodauksen ilmoittamisesta
joissakin palvelimissa.
HTML-dokumenttiin itseensä
(sen head
-osaan)
voitaisiin myös kirjoittaa seuraava:
<meta http-equiv="Content-Type"
content="text/html;charset=utf-8">
Tätä voisi käyttää joko sen asemesta tai sen lisäksi, että
palvelin saatetaan lähettämään vastaava informaatio.
Periaatteessa palvelimen tehtävä olisi lähettää tällainen informaatio,
mutta jos et kerta kaikkiaan löydä tapaa tehdä sitä, niin käytä
edellä mainittua
meta
-elementtiä.
Mutta kyseessä olisi "viritys", joka voi aiheuttaa ongelmia mm.
Netscapen erään virheen takia.
Tässä vaiheessa on kenties herännyt
kysymys, miksi
dokumentille ilmoitettaisiin
charset=utf-8
vaikka se sisältää vain
Ascii-merkkejä.
Teknisesti Ascii-merkkien jonon voidaan ilmoittaa olevan
UTF-8-koodattu, koska
kyseinen koodaus esittää Ascii-merkit sellaisinaan?
Mutta miksi tekisimme niin?
Koska monet suositut selaimet
toimivat väärin, tulkiten numeeriset viittaukset
virheellisesti, jos koodaukseksi on ilmoitettu esimerkiksi
US-ASCII tai ISO-8859-1. Tässä asiassa auttaa
"julistaa" koodauksen olevan UTF-8. (Toinen vaihtoehto joissakin
selaimissa on se, että käyttäjä muuttaa
selaimen asetuksia, mutta tähän joutumista pitäisi välttää.)
Tätä menettelyä on arvosteltu puolinaiseksi ratkaisuksi, ja on ehdotettu, että saman tien voisi käyttää aitoa UTF-8-koodausta tai jotain muuta Unicode-koodausta. Edellä kuvattu menettely saattaa olla sopivampi nykyisin mm. seuraavista syistä:
&#
luku;
-merkintöjä.
Jos tarvitaan vain suppeahkoa merkkivalikoimaa, kuten Ascii-merkkejä sekä kyrillisiä tai kreikkalaisia kirjaimia, voidaan menetellä seuraavasti:
Tämän menetelmän eri muunnelmia sovelletaan laajasti.
Hyvin usein kuitenkin viimeinen kohta jätetään tekemättä tai
se tehdään väärin. Katsotaanpa mitä tapahtuu esimerkiksi silloin, kun
dokumentin koodaus on koi8-r mutta palvelin lähettää sen ilman
tietoa koodauksesta.
Venäjällä useimmat selaimet on asetettu olettamaan dokumenttien
koodaukseksi oletusarvoisesti koi8-r, joten se näkyy niillä oikein.
Muualla selaimet tyypillisesti näyttävät sivun hyvin oudosti,
koska ne normaalisti käyttävät muuta koodausta (kuten
ISO Latin-1 tai
Windows Latin 1).
Tällöin mitään kyrillisiä kirjaimia ei näy, oli järjestelmässä
mitä kyrillisiä fontteja tahansa. Käyttäjä voi yrittää korjata tilanteen
muuttamalla "käsin" koodauksen toiseksi (esim. Netscape 4:ssä
View
-valikon Encoding
-alivalikosta).
Kyse on yrityksestä ja erehdyksestä; huomattakoon, että kokeiltavana
useita eri koodauksia vaikka olettaisimme tietävämme, että
teksti on venäjää.
Tämä menetelmä toimii suhteellisen hyvin sivuille, jotka sisältävät
esimerkiksi venäjää ja englantia. Mutta jos mukaan haluttaisiin
myös vaikkapa suomen- tai ranskankielistä tekstiä, menetelmä ei
sovellu: suomi vaatii "ääkkösiä" ja ranska aksentillisia merkkejä,
eikä ole mitään
yksinkertaista koodausta, joka sallisi
käyttää sekä niitä että kyrillisiä kirjaimia.
(Periaatteessa "ääkköset" ja aksentilliset latinalaiset kirjaimet
voitaisiin esittää käyttäen ns. merkkientiteettejä kuten
ä
(ä) tai
é
(é), mutta valitettavasti
selainten virheiden takia joutuisit vaikeuksiin - tai pikemminkin
lukijasi joutuisivat.)
Yksinkertaisena esimerkkinä tarkastelemme seuraavaa ongelmaa: haluamme sisällyttää HTML-dokumenttiin tekstiä, joka sisältää turkinkielisiä nimiä, joissa esiintyy sellaisia merkkejä kuin pisteetön "i", "g" jonka päällä on eräänlainen hattu sekä "S" ja "s", joiden alla on pilkun tapainen merkki. (Tämä ei ole täsmällinen muotoilu, koska se ei käytä merkkien standardoituja nimiä, mutta se on kohtalaisen tarkka.)
Jos käytetään yksinkertaista menetelmää,
on syytä ensin katsoa
ISO 8859
Merkkivalikoiman suhteen yleispätevää tapaa
käytettäessä tarvittaisiin tieto merkkien Unicode-koodiarvoista.
(Jos tiedät merkin koodiarvon jossakin
ISO 8859 &#
luku;
varten
pitäisi sitten vielä muuntaa koodiarvo
heksadesimaalisesta desimaaliseksi.
Yksinkertainen ISO 8859-9 -koodausta käyttävä testidokumenttini näyttää toimivan oikein Netscape 3:ssa ja 4:ssä Windows 95:ssä, mutta IE 4 esittää merkit ikään kuin koodauksena olisi ISO 8859-1, luultavasti siksi, että se ei tunne koodausta ISO 8859-9 ja soveltaa sen asemesta oletuskoodaustaan; Windows NT:ssä dokumentti toimii myös IE 4:ssä.
Yksinkertainen
&#
luku;
-merkintöjä
käyttävä testidokumenttini näyttää toimivan oikein
sekä Netscape 4:ssä että IE 4:ssä Windows 95:ssä.
Netscape 3 ei osaa käsitellä sitä, koska
se ei tue merkintöjä
&#
luku;
, joissa
luku > 256.
Tämän dokumentin sisältö on pääosin peräisin Alan J. Flavellin kirjoituksesta Notes on Internationalization, ja suosittelen vahvasti lukemaan sen, koska se antaa syvällisemmän selityksen sekä lisää yksityiskohtaisia tietoja ja vaihtoehtoisia menetelmiä. (Toivottavasti en liiaksi ymmärtänyt väärin tai vääristänyt sen sisältöä.) Hänen kirjoituksensa I18n Quickstart käsittelee samoja asioita toisista näkökulmista, ja Checklist for HTML character coding esittää tiiviissä muodossa eri vaihtoehdot tehdä dokumentteja sen mukaan, millaista merkkivalikoimaa tarvitaan.
Dan's Web Tips sisältää helppolukuisen osuuden merkistöaiheista: Characters and Fonts.
Alis Babel
on sivusto, jossa on asiantuntijoiden neuvoja Webin
"kansainvälistämisen" eri puolista, myös merkkikoodiongelmista.
Erityisesti on syytä mainita dokumentti
<FONT FACE> considered harmful,
joka selittää, miksi usein ehdotettu ajatus merkkivalikoiman
laajentamisesta
font face
Dmitri Kirsanovin HTML Unleashed: Internationalizing HTML selostaa useita peruskäsitteitä luultavasti paremmin kuin tässä jutussa on tehty. Siinä myös käsitellään kirjoitussuuntaan liittyviä kysymyksiä.
Vancouver Webpages -sivuston dokumentti Using Multiple Languages in HTML sisältää linkkejä testisivuille, joilla on tekstejä eri kielillä ja eri koodauksia käyttäen.
Olen koonnut pienen dokumentin HTML authoring in different languages - a link list, joka sisältää viitteitä eräitä kieliä koskeviin erityiskysymyksiin.
Ks. myös H. Churchyardin kirjoitusta Latin 1 and Unicode characters in ampersand entities.
Alan Wood on koonnut katsauksen eräisiin ohjelmiin, joilla voi kirjoittaa dokumentteja eri koodauksia käyttäen: Unicode and Multilingual Editors and Word Processors. Windows-käyttäjien kannattaa erityisesti tutustua UniPad-editoriin, joka tukee sekä Unicodea että useita muita koodauksia. (Ja tarvittaessa voi Free recode -ohjelmalla muuntaa aineiston Unicode-koodauksesta melkein mihin tahansa koodaukseen.)
Jos Web-sivulla on käytetty laajaa tai tavallisesta muutoin poikkeavaa merkkivalikoimaa, saattaa olla tarpeen muuttaa selaimen asetuksia erityisesti sitä varten, että selain käyttäisi sopivaa fonttia (kirjasinvalikoimaa, kirjasinleikkausta). (Tämä ei pitäisi olla tarpeellista, mutta selainten puutteiden takia käyttäjät saattavat toistaiseksi joutua sotkeutumaan näihin asioihin.)
Kun Web-sivu käyttää tässä dokumentissa kuvattua, merkkivalikoiman suhteen yleispätevää tapaa, selaimen täytyy tulkita dokumentti UTF-8-koodauksen mukaan. Selaimen tulisi osata tehdä tämä automaattisesti, jos sivun tekijä on tehnyt oman osansa oikein. Voit testata tilannetta yksinkertaisella dokumentilla, joka sisältää kreikkalaisia, kyrillisiä ja ns. laajennetun latinalaisen merkistön kirjaimia. Jos se näyttää olevan kunnossa, selaimesi toimii tältä osin todennäköisesti oikein, ja seuraavan kappaleen ohjeet ovat tarpeettomia sinun tilanteessasi.
Jos selaimesi ei osaa käsitellä näitä merkistöasioita automaattisesti
oikein, voit joutua
muuttamaan koodauksen
"käsin" selaimesi asetuksista.
Huomaa, että saattaa olla tarpeen palauttaa koodaustapa ennalleen
muiden sivujen katselemista varten, joten kirjoita asetukset muistiin,
ennen kuin muutat niitä.
Tässä yhteydessä ei ole tarpeen tietää,
millainen koodaus UTF-8 on,
mutta saattaa olla tarpeen tietää, että jotkin selaimet viittaavat
siihen epämääräisesti nimellä "Unicode".
Esimerkiksi Netscape 4:ssä voit käyttää
View-valikon
Encoding-alivalikkoa
(tai uudemmissa versioissa
Character Set
Toiseksi - ja tämä voi olla vaikeampaa - voi olla tarpeen käskeä selainta käyttämään sopivaa fonttia; käytännössä tämä merkitsee merkkivalikoimaltaan tarpeeksi laajan fontin liittämistä "Unicode-koodaukseen". (Selainten valmistajat tyypillisesti sotkevat sellaiset käsitteet kuin merkkikoodi, koodaus, fontti ja kieli keskenään, ja aika perinpohjaisesti, joten selainten käyttöliittymissä näitä asioita kutsutaan omituisilla nimityksillä.) Erityisesti
Jos tietokoneessasi ei ole sopivaa fonttia, tarkista ensin, saisitko sellaisen käyttöön asentamalla ns. monikielisyyden tuen, joka tuli käyttöjärjestelmän mukana mutta joka ehkä ei sisältynyt perusasennukseen. (Jostain käsittämättömästä syystä ns. esiasennettu Windows yleisesti toimitetaan ilman monikielisyyden tukea, vaikka sen vaatima levytila on melko mitätön verrattuna nykyisin myytävien kovalevyjen kokoihin.) Jos tästä ei ole apua, ks. esim. dokumenttia Meta-archive of non-Latin fonts.
Arial Unicode MS on Microsoftin jakelema fontti, jossa on noin 40 000 merkkiä. Se oli aiemmin ladattavissa Microsoftin Web-sivulta, mutta nykyisin ilmeisesti ainoa tapa saada se on ostaa Microsoft Office tai Publisher.
Lisätietoja on Alan Flavellin sivulla I18n - Browsers and fonts.
Tarkistaaksesi, mitä kaikkia Unicode-merkkejä jokin koneessasi oleva fontti tukee, voit käyttää testisivuja generoivaa palveluani tai Alan Flavellin Unicode-testiaineistoa.
Eräät kommentoijat ovat aiheellisesti huomauttaneet, että tässä dokumentissa käsitelty "yleispätevä" tapa on tehoton ja kömpelö erityisesti teksteille, joissa tarvitaan hyvin laajaa merkkivalikoimaa. Tämän takia käsittelen lyhyesti "aitojen" Unicode-koodausten käyttöä. Lisätietoja on merkkikoodioppaani Unicode-osuudessa.
Luonnollisin tapa esittää dokumentti Unicodea käyttäen olisi
Unicoden "oma" koodaus, UCS-2. Näyttää kuitenkin siltä, että
IE 4 ei tue, vaikka Netscape 4 tukeekin.
Koska molemmat tukevat UTF-8:aa ja UTF-7:ää,
nämä olisivat käytännössä parempia valintoja.
Ja koska UTF-7 suunniteltiin sellaisiin tilanteisiin, joissa
data kulkee sellaisen siirtotien kautta, joka ei ole
"turvallisesti
Selainten tuki UTF-8:lle on suurin piirtein sama kuin menetelmälle, joka käyttää numeerisia viittauksia. Mutta jälkimmäinen tapa voidaan toteuttaa mitä tahansa editoria käyttäen - siinä kirjoitetaan vain Ascii-merkeillä - kun taas UTF-8-koodaus edellyttää editoria, joka pystyy kirjoittamaan dataa UTF-8-koodatussa muodossa, tai muunnosohjelmaa, joka muuntaa esityksen jostakin muusta muodosta UTF-8:aan.
Unicode-organisaation sivustossa on testisivu, joka on UTF-8-koodattu ja sisältää tekstejä useilla eri kielillä. Voi olla kiinnostavaa katsoa sitä Netscapen tai IE:n eri versioilla (4.0:sta alkaen), käyttäen erilaisia fonttiasetuksia.
Viimeisimmän päivityksen ajankohta: 2003-08-13.
Jukka KorpelaPanos Stokas
on ystävällisesti kääntänyt tämän
dokumentin kreikaksi
(englanninkielisestä
versiosta):
Χρήση εθνικών και ειδικών χαρακτήρων στην HTML.
Kreikannos on saatavilla
windows-1253-koodattuna,
ISO