Windows-merkistön aiheuttamista ongelmista Webissä (ja muuallakin)

Sisällys:

Tämä dokumentti on lähinnä historial­li­nen: se kuvaa ongelmia, joilla oli mer­ki­tys­tä Webin alkuaikoina. Nykyisin Unix-, Linux- ym. ympäristöissä toimivat se­lai­met yleensä tulkitsevat tässä kuvatut merk­kien koodit samoin kuin Windows.

Niin sanotussa Windows-merkistössä on eräitä merkkejä, mm. ajatusviivat, jotka eivät kuulu ISO-Latin-1-merkistöön. Tämä aiheuttaa joskus pahojakin ongelmia, kun Windows-ympäristössä tehty dokumentti siirretään Webiin tarkistamatta konversio-ohjelman tuottamaa tulosta. Tässä käsitellään ratkaisua, jossa korvataan kyseiset ongelmalliset merkit lähinnä vastaavilla ISO-Latin-1-merkeillä, kuten ajatusviiva yhdysmerkillä.

I have written a more extensive document in English about the topic discussed here: On the use of some MS Windows characters in HTML.

Tässä kuvattava ratkaisu on varsin konservatiivinen mutta edelleenkin perusteltu meilissä (sähköpostissa). Myös Web-sivuilla sitä voi käyttää, jos ei halua ottaa mitään riskejä merkistön suhteen. Itse asiassa useimmilla sivuilla edelleenkin menetellään näin.

Käsitteellistä taustaa tässä kuvattaville ilmiöille ja ongelmille antaa sivu Mikä on merkki?

Ongelman oireet

Tässä käsiteltävät ongelmat ilmenevät Word Wide Webin käyttäjille siten, että joidenkin Web-dokumenttien teksti näyttää omituiselta. Tavallisin oire on, että tekstistä puuttuu merkkejä. Oireet vaihtelevat käytettävän katseluohjelman ja muun ympäristön mukaan, esim.

Viimeksi mainittu ilmenemistapa on ikävin, joskin se on onneksi varsin harvinainen. Se on esiintynyt ainakin käytettäessä graafista selainta X-palvelinohjelmiston kautta. Lisäksi lisäoireena on ollut selaimen sekoaminen niin, että jatkossa merkit ylipäänsäkin näkyvät miten sattuu.

Ongelman syy

Ongelman syynä on se, että dokumentissa käytetään ISO-Latin-1-merkistöön kuulumattomia merkkejä, erityisesti sellaisia koodeja, jotka kyseissä merkistössä on nimenomaisesti varattu ei-kirjoittuville merkeille eli kontrollimerkeille. Ongelman tekee melko tavalliseksi se, että osa näistä merkeistä on ns. Windows-merkistössä kirjoittuvia merkkejä kuten ajatusviiva, promillemerkki ym. Usein esitetty väite, jonka mukaan Windows-merkistö on sama kuin ISO-Latin-1, ei siis pidä paikkaansa.

Windows-merkistöä kutsutaan usein harhaanjohtavasti ANSI-merkistöksi, vaikka se nimenomaan ei ole minkään standardointijärjestön (kuten ANSI) hyväksymä vaan valmistajan, Microsoftin, määrittelemä. Virallisempi nimi on Windows Latin 1 ja koodinimi (ns. charset-nimi) windows-1252.

Vaikka HTML-kielen määrittelyt, esim. alkuperäinen RFC 1866 (HTML 2.0), puhuvat merkistöasioista yleisin ja tulkinnanvaraisin sanakääntein, niin käytännössä merkistönä on enimmäkseen ollut ISO-Latin-1 eli ISO 8859-1. Sitäkään eivät aivan kaikki katseluohjelmat (Mac-tietokoneissa) vielä tue aivan täysin. Ei pidä ilman muuta olettaa, että dokumentissa olevat muut kuin ISO-Latin-1-merkit näkyisivät missään järkevässä muodossa, vaikka näkyisivät ihan halutulla tavalla dokumentin tekijän omalla ohjelmalla ja omassa käyttöympäristössä katseltuina. Ne voivat näyttää täysin käsittämättömiltä muualla.

Usein Web-dokumentit on tuotettu jollakin muunnosohjelmalla eli konvertterilla. Näyttää ilmeiseltä, että kyseisten ohjelmien tekijätkään eivät aina ole olleet tietoisia ISO-Latin-1-merkistön ja Windows-merkistön eroista. Niinpä ohjelmat saattavat "päästää lävitseen" edellä mainittuja Windowsin omia merkkejä ilman muunnoksia (tai väärin muuntaen) ja jopa väittää tuotostaan ISO-8859-1:n mukaiseksi.

Vastaavia ongelmia, joissa jokin merkki esitetään ISO-Latin-1:n vastaisella tavalla, esiintyy myös dokumenteissa, jotka on tuotettu esim. PC- tai Mac-merkistöä käyttävästä tiedostosta. Olen nähnyt mm. dokumentteja, jotka on ilmeisesti konvertoitu PC-merkistöä käyttävästä muodosta ja joissa ö-kirjaimen tilalla on oktaalikoodi 224; se on ö:n koodi PC-merkistössä mutta kuuluu ISO-Latin-1:ssä kontrollimerkeille varattuun alueeseen. (Korrekti muunnos olisi sellainen, jossa koodina on ISO-Latin-1:n mukainen 366 tai jossa ö:n tilalla HTML-dokumentissa on symbolinen merkintä ö.)

Ongelman ratkaisu

Ongelman ratkaisuna on lyhyesti sanottuna se, että ei käytetä Web-dokumenteissa merkkejä, joiden oktaaliset koodiarvot ovat 200 - 237. Tämä voi vaatia erilaisia toimenpiteitä, joista eräitä kuvataan jäljempänä.

Jos käytät konversio-ohjelmia, jotka muuntavat esim. Word-dokumentteja HTML:ksi, tarkista, ettei tuloksessa ole koodiarvoja 200 - 237. Tämä voidaan tarvittaessa tehdä vaikkapa pienellä C-ohjelmalla.

Tämä lähestymistapa on nykyisin varsin varovainen Webissä, sillä jäljempänä kuvattava tapa esittää merkit standardien mukaan toimii jo lähes kaikissa selaimissa. Sen sijaan se on edelleenkin hyvin tarpeellinen esimerkiksi lähetettäessä meiliä (sähköpostia).

Windows-merkistö ja korvikkeet

Windows-merkistöstä on eri käsikirjoista erilaisia muunnelmia, eikä sille näytä kovin helposti löytyvän virallista määritelmää. Seuraava esitys kuitenkin vastannee tavallista tilannetta ja lienee käsiteltävän käytännön ongelman kannalta riittävä.

ISO-Latin-1-merkistössä (oktaalisia) koodiarvoja 200 - 237 on nimenomaisesti varattu kontrollimerkeille, siis muille kuin kirjoittuville merkeille. Sen sijaan Windows-merkistössä osa niistä on kirjoittuvia merkkejä. Erään kuvauksen perusteella ne ovat seuraavat; esitän sen mukaisen englanninkielisen nimen ja oktaalikoodin sekä suomenkielinen kuvailuni ja ehdotukseni tavasta korvata merkki ISO-Latin-1-merkillä tai -merkeillä, ja mukaan on otettu myös myöhemmin merkistöön lisätyt euron merkki ja hattu-z.

euro sign               200  euron merkki                                   euroa
baseline single quote   202  rivin alareunassa oleva puolilainausmerkki     '
florin                  203  floriinin merkki, kursiivi-f                   f
baseline double quote   204  rivin alareunassa oleva kokolainausmerkki      "
ellipsis                205  poisjätön eli ellipsin merkki, kolme pistettä  ...
dagger                  206  risti (kuolinhetken t. alaviitteen merkki)     k. tai ¹
double dagger           207  kaksoisristi (yleensä alaviitteen merkki)      ²
circumflex accent       210  sirkumfleksi                                   ^
permile                 211  promillemerkki                                 o/oo
S Hacek                 212  iso hattu-s                                    Sh tai SH
left single guillemet   213  vasemmanpuoleinen ranskalainen lainausmerkki   "
OE ligature             214  O:n ja E:n yhdistelmä eli ligatuuri            Oe tai OE
Z Hacek                 216  iso hattu-z                                    Zh tai ZH
left single quote       221  vasemmanpuoleinen puolilainausmerkki           '
right single quote      222  oikeanpuoleinen puolilainausmerkki             '
left double quote       223  vasemmanpuoleinen kokolainausmerkki            "
right double quote      224  oikeanpuoleinen kokolainausmerkki              "
bullet                  225  (musta) "pallukka"                             o tai -
endash                  226  lyhyt ajatusviiva                              -
emdash                  227  pitkä ajatusviiva                              -
tilde accent            230  tilde                                          ~
trademark ligature      231  tavamerkin symboli, TM (yhtenä merkkinä)       TM
s Hacek                 232  pieni hattu-s                                  sh
right single guillemet  233  oikeanpuoleinen ranskalainen lainausmerkki     "
oe ligature             234  o:n ja e:n yhdistelmä eli ligatuuri            oe
z Hacek                 236  pieni hattu-z                                  zh
Y Dieresis              237  Y, jonka päällä on treema eli kaksi pistettä   Y

Huomautuksia korvikemerkinnöistä

Korvaavia merkkejä käytettäessä on tietysti käytettävä harkintaa, jossa otetaan huomioon asiayhteys. Koska Windows-merkistössä on enemmän kirjoittuvia merkkejä kuin ISO-Latin-1:ssä, muunnoksessa häviää väistämättä informaatiota. Tilanteesta riippuu, onko tämä vakavaa. Jos edellä mainittuja Windows-merkkejä sisältävä dokumentti halutaan sijoittaa Webiin siten, että merkit säilyvät sellaisinaan, niin ainoa mahdollisuus on tallettaa se kuvamuodossa (esim. Postscript-muodossa). Yleensä tämä ei ole tarpeellista.

Erityisiä huomautuksia edellä mainituista merkeistä ja niiden korvaamisesta:

Merkkien oikea esitys HTML:ssä

Seuraavassa taulukossa esitetään Windows-merkistön lisämerkkien eräät standardinmukaiset esitystavat HTML:ssä, nimittäin merkki- ja entiteettiviittaukset. Ensimmäisessä sarakkeessa on merkki itse, toisessa merkin virallisimpana pidettävä suomenkielinen nimi, kolmannessa merkkiviittaus ja neljännessä entiteettiviittaus. Merkit ovat merkkiviittauksen numeron ja siten Unicode-koodin mukaisessa järjestyksessä.

Windows Latin 1:n lisämerkit
suomenkielinen nimi merkkiv. entiteetti Unicode huomautuksia
Πlatinalainen suuraakkosligatuuri oe ΠΠU+0152 mm. ranskassa
œ latinalainen pienaakkosligatuuri oe œ œ U+0153 mm. ranskassa
Š latinalainen suuraakkonen s ja hattu Š Š U+0160 iso hattu-s
š latinalainen pienaakkonen s ja hattu š š U+0161 pieni hattu‑s
Ÿ latinalainen suuraakkonen y ja treema Ÿ Ÿ U+0178 ranskassa
Ž latinalainen suuraakkonen z ja hattu Ž   U+017D iso hattu-z
ž latinalainen pienaakkonen z ja hattu ž   U+017E pieni hattu‑z
ƒ latinalainen pienaakkonen f jossa koukku ƒ ƒ U+0192  
ˆ sirkumfleksi-tarke ˆ ˆ U+02C6  
˜ pieni tilde ˜ ˜ U+02DC eri kuin ~
- n-viiva – – U+2013 lyhyt ajatusviiva
- m-viiva — — U+2014 pitkä ajatusviiva
ylösalainen puolilainausmerkki ‘ ‘ U+2018 mm. englannissa
puolilainausmerkki ’ ’ U+2019 mm. suomessa
rivinalinen puolilainausmerkki ‚ ‚ U+201A  
ylösalainen kokolainausmerkki “ “ U+201C mm. englannissa
kokolainausmerkki ” ” U+201D mm. suomessa
rivinalinen kokolainausmerkki „ „ U+201E  
risti † † U+2020  
kaksoisristi ‡ ‡ U+2021  
luetelmapallo • • U+2022  
kolme pistettä vaakasuunnassa … … U+2026  
promillemerkki ‰ ‰ U+2030  
vasemmalle osoittava kulmapuolilainausmerkki ‹ « U+2039 mm. ranskassa
oikealle osoittava kulmapuolilainausmerkki › › U+203A mm. ranskassa
euron merkki € € U+20AC  
tavaramerkin merkki ™ ™ U+2122