Ero sivun ”Unicode” versioiden välillä

Linux.fista
Siirry navigaatioon Siirry hakuun
(→‎Kieliä: saksan iso ß → ẞ)
 
(72 välissä olevaa versiota 30 käyttäjän tekeminä ei näytetä)
Rivi 1: Rivi 1:
{{perustietoa}}
{{perustietoa}}
[[wikipedia:fi:Unicode|Unicode Wikipediassa]]


'''Unicode''' on standardi, joka mm. määrittelee kaikille maailman kirjoitusmerkeille omat merkkikoodinsa. Tarkoituksena on korvata tähän saakka käytössä olleet keskenään hyvin erilaiset, lähes kielikohtaiset merkistöt. Suomessa on Linux-koneissa käytetty enimmäkseen ISO-8859-15-merkistöä. Vanhojen merkistöjen ongelma on, että niiden merkkivalikoima on hyvin rajallinen, esimerkiksi 256 merkkiä. Se yleensä tarkoittaa, että samalla merkistöllä ei voida esittää useita kovin erilaisia kieliä. Esimerkiksi sama tekstitiedosto tai sähköpostiviesti ei voi sisältää tekstiä kuin niillä kielillä, joita kyseisellä merkistöllä voidaan esittää. Tämä ei kenties häiritse yksittäistä tietokoneenkäyttäjää, mutta sitä mukaa, kun kansainvälinen tietoliikenne on lisääntynyt, on myös lisääntynyt tarve luoda kaikille yhteinen standardi kirjoitusmerkkien esittämiseksi.
'''Unicode''' on standardi, joka muun muassa määrittelee useimmille maailman kirjoitusmerkeille omat merkkikoodinsa. Standardin tarkoituksena on korvata tähän saakka käytössä olleet hyvin erilaiset ja keskenään huonosti yhteensopivat merkistöt. Suomessa on Linux-koneissa käytetty enimmäkseen ISO-8859-15-merkistöä. Vanhojen merkistöjen ongelma on, että niiden merkkivalikoima on hyvin rajallinen, esimerkiksi 256 merkkiä. Se yleensä tarkoittaa, että samalla merkistöllä ei voida esittää useita kovin erilaisia kieliä. Esimerkiksi sama tekstitiedosto tai sähköpostiviesti ei voi sisältää tekstiä kuin niillä kielillä, joita kyseisellä merkistöllä voidaan esittää. Tämä ei kenties häiritse yksittäistä tietokoneenkäyttäjää, mutta sitä mukaa, kun kansainvälinen tietoliikenne on lisääntynyt, on myös lisääntynyt tarve luoda kaikille yhteinen standardi kirjoitusmerkkien esittämiseksi.


Unicode pyrkii ratkaisemaan vanhojen merkistöjen rajallisuuteen liittyvät ongelmat luomalla merkistön, joka sisältää kaikki nykyiset (ja jopa entiset) kirjoitusjärjestelmät. Unicode-standardi käsittää 1 114 112 merkkipaikkaa, ja ne yksilöidään U+xxxx-muotoisella tunnuksella, jossa ”xxxx” on merkin numerokoodi heksadesimaalimuodossa (16-järjestelmä). Mahdolliset koodit ovat U+0000..U+10FFFF. Käytännössä ihan jokainen merkkipaikka ei viittaa mihinkään kirjoitusmerkkiin, vaan mukana on jonkin verran myös erilaisia ohjauskoodeja tietokonetta varten sekä Unicode-standardiin liittyvää erikoistietoa. Joka tapauksessa merkkipaikkoja on niin paljon, että kaikki olemassa olevat ja jo historiaan jääneet kirjoitusmerkit mahtuvan mukaan. Tästä huolimatta merkkipaikkoja on runsaasti tyhjillään tulevaisuuden varalta ja kaikkia tuskin tarvitaan koskaan. Mukana on myös suuri joukko tarkoituksella määrittelemättömiä, yksityiseen käyttöön varattuja merkkipaikkoja.
Unicode pyrkii ratkaisemaan vanhojen merkistöjen rajallisuuteen liittyvät ongelmat luomalla merkistön, joka sisältää kaikki nykyiset (ja jopa entiset) kirjoitusjärjestelmät. Unicode-standardi käsittää 1 114 112 merkkipaikkaa, ja ne yksilöidään U+xxxx-muotoisella tunnuksella, jossa ”xxxx” on merkin numerokoodi heksadesimaalimuodossa (16-järjestelmä). Mahdolliset koodit ovat U+0000..U+10FFFF. Käytännössä ihan jokainen merkkipaikka ei viittaa mihinkään kirjoitusmerkkiin, vaan mukana on jonkin verran myös erilaisia ohjauskoodeja tietokonetta varten sekä Unicode-standardiin liittyvää erikoistietoa. Joka tapauksessa merkkipaikkoja on niin paljon, että kaikki olemassa olevat ja jo historiaan jääneet kirjoitusmerkit mahtuvan mukaan. Tästä huolimatta merkkipaikkoja on runsaasti tyhjillään tulevaisuuden varalta ja kaikkia tuskin tarvitaan koskaan. Mukana on myös suuri joukko tarkoituksella määrittelemättömiä, yksityiseen käyttöön varattuja merkkipaikkoja.


Unicode-merkkejä sisältävää tekstiä voidaan tallentaa tietokoneelle useilla eri tavoilla. Linuxissa ja yleensäkin tietoliikenteessä käytetty Unicoden koodaustapa on nimeltään '''UTF-8'''. Tässä koodauksessa yksi Unicode-merkki vie tallennustilaa 1–4 oktettia eli 8 bitin tavua. ASCII-merkistöön kuuluvat merkit (U+0000..U+007F) esitetään UTF-8:ssa sellaisenaan, yhtenä tavuna, joten UTF-8 on täysin ASCII-yhteensopiva. Se onkin Linuxissa tärkeää, koska siinä käytetään paljon ASCII-muodossa olevia asetustiedostoja ja käynnistysskriptejä. Muiden kuin ASCII-merkkien esittämiseksi tarvitaan avuksi lisätavuja, ja esimerkiksi suomen kieleen kuuluvien ä- ja ö-kirjainten esittämiseen tarvitaan kaksi tavua.
Unicode-merkkejä sisältävää tekstiä voidaan tallentaa tietokoneelle useilla eri tavoilla. Linuxissa ja yleensäkin tietoliikenteessä käytetty Unicoden koodaustapa on nimeltään '''[[UTF-8]]'''. Tässä koodauksessa yksi Unicode-merkki vie tallennustilaa 1–4 oktettia eli 8 bitin tavua. ASCII-merkistöön kuuluvat merkit (U+0000..U+007F) esitetään UTF-8:ssa sellaisenaan, yhtenä tavuna, joten ASCII on täysin UTF-8-yhteensopiva. Se onkin Linuxissa tärkeää, koska siinä käytetään paljon ASCII-muodossa olevia asetustiedostoja ja käynnistysskriptejä. Muiden kuin ASCII-merkkien esittämiseksi tarvitaan avuksi lisätavuja, ja esimerkiksi suomen kieleen kuuluvien ä- ja ö-kirjainten esittämiseen tarvitaan kaksi tavua.


UTF-8:n lisäksi on olemassa muitakin koodaustapoja, esimerkiksi UTF-16 ja UTF-32. UTF-16:ssa merkit esitetään joko yhtenä 16-bittisenä lukuna, tai mikäli merkin koodi on sitä suurempi, niin kahden 16-bittisen luvun muodostamana nk. surrogaattiparina. UTF-32:ssa merkki esitetään aina yhtenä 32-bittisenä lukuna. Kuten todettu, Linuxissa käytetään UTF-8:aa. Ohjelmat voivat kuitenkin sisäisesti käyttää muitakin koodaustapoja; ohjelmien tekijät voivat vapaasti valita omaan ohjelmaansa sopivan tavan tallentaa tietoa.
UTF-8:n lisäksi on olemassa muitakin koodaustapoja, esimerkiksi UTF-16 ja UTF-32. UTF-16:ssa merkit esitetään joko yhtenä 16-bittisenä lukuna, tai mikäli merkin koodi on sitä suurempi, niin kahden 16-bittisen luvun muodostamana nk. sijaismerkkiparina (surrogate pair). UTF-32:ssa merkki esitetään aina yhtenä 32-bittisenä lukuna. Kuten todettu, Linuxissa käytetään pääasiassa UTF-8:aa. Ohjelmat voivat kuitenkin sisäisesti käyttää muitakin koodaustapoja, ja ohjelmien tekijät voivat vapaasti valita omaan ohjelmaansa sopivan tavan tallentaa tietoa.


Nykyisin monet Linux-jakelut käyttävät UTF-8:aa oletuksena. Tämän voi havaita siitä, että järjestelmän käyttämien lokaalien nimessä on ”.UTF-8”. Esimerkiksi Suomessa käytetään lokaalia nimeltä ”fi_FI.UTF-8”. Tällaista lokaalia käytettäessä järjestelmä tukee Unicodea ja mm. tiedostojen nimiin ja tekstitiedostoihin on periaatteessa mahdollista kirjoittaa kaikkia Unicode-merkkejä. Käytännössä mikään fontti ei ihan kaikkia merkkejä kykene näyttämään.
Nykyisin monet Linux-jakelut käyttävät UTF-8:aa oletuksena. Tämän voi havaita siitä, että järjestelmän käyttämien [[lokaali]]en nimessä on ”.UTF-8”. Esimerkiksi Suomessa käytetään lokaalia nimeltä ”fi_FI.UTF-8”. Tällaista lokaalia käytettäessä järjestelmä tukee Unicodea ja mm. tiedostojen nimiin ja tekstitiedostoihin on periaatteessa mahdollista kirjoittaa kaikkia Unicode-merkkejä. Käytännössä mikään fontti ei yksinään kykene näyttämään kaikkia merkkejä.


== Tekstitiedostot ==
== [[Tiedostojärjestelmä]]t ==


Jos omassa Linux-järjestelmässä on aiemmin ollut käytössä ISO-8859-15-merkistö (esimerkiksi lokaali fi_FI@euro) ja sittemmin on siirrytty UTF-8:aan, täytyy omat tekstitiedostot muuttaa UTF-8-koodatuiksi, jotta niiden sisältö näkyisi oikein. Yksi tapa tekstitiedoston muuttamiseen UTF-8-koodaukseen on avata se johonkin tekstieditoriin ja tallentaa sitten teksti uudella koodauksella. Nopeampaa saattaa kuitenkin olla komentotulkin ja [[recode]]-ohjelman käyttö:
=== Ext3 ja muut Unixien tiedostojärjestelmät ===
recode ISO-8859-15..UTF-8 tiedosto.txt
Tiedostojen nimissä käytetyn merkistön muuntaminen onnistuu [[convmv]]-nimisellä ohjelmalla.
 
== [[Tiedostojärjestelmä]]t ==


=== EXT3 ===
[[Ext3]] on Linuxissa yleisesti käytetty tiedostojärjestelmä. Se tukee täydellisesti Unicodea ja UTF-8:aa mutta tekee sen tavallaan tietämättään. Samoin on asia muissakin tiedostojärjestelmissä, joita käytetään Linuxissa ja Unix-tyyppisissä käyttöjärjestelmissä. Tiedostojärjestelmät eivät välitä, mitä merkkejä tiedostojen nimissä on, eivätkä ne tallenna mitään tietoa käytetystä merkistöstä tai sen koodaustavasta. Kiellettyjä merkkejä Linuxin tiedostojärjestelmissä ovat ainoastaan nollatavu (ASCII NUL, U+0000) ja [[vinoviiva]] (”/”, U+002F).


EXT3 on Linuxissa yleisesti käytetty tiedostojärjestelmä. Se tukee täydellisesti Unicodea ja UTF-8:aa mutta tekee sen tavallaan tietämättään. EXT3-tiedostojärjestelmä ei välitä, mitä merkkejä tiedostojen nimissä on eikä tallenna mitään tietoa käytetystä merkistöstä tai sen koodaustavasta. Se vain tallentaa ne raa’asti tavujonoina. Tiedostojärjestelmää lukiessaan Linux tulkitsee tiedostojen nimet käytössä olevan lokaalin perusteella. Jos käytössä on UTF-8-lokaali (esimerkiksi fi_FI.UTF-8), niin järjestelmä katsoo, että tiedostojen nimet ovat UTF-8-koodattuja. Tästä seuraa sellainen ikävä asia, että jos tiedostojen nimet on kirjoitettu käyttäen eri lokaalia kuin mikä parhaillaan on käytössä, niin todennäköisesti nimet eivät näy oikein. Tiedostojen nimien muuttaminen merkistökoodauksesta toiseen onnistuu [[convmv]]-ohjelmalla.
Tiedostojärjestelmää lukiessaan Linux tulkitsee tiedostojen nimet käytössä olevan lokaalin perusteella. Jos käytössä on UTF-8-lokaali (esimerkiksi fi_FI.UTF-8), niin järjestelmä tulkitsee, että tiedostojen nimet ovat UTF-8-koodattuja. Tästä seuraa sellainen ikävä asia, että jos tiedostojen nimet on kirjoitettu käyttäen eri lokaalia kuin mikä parhaillaan on käytössä, todennäköisesti nimet eivät näy oikein. Tiedostojen nimien muuttaminen merkistökoodauksesta toiseen onnistuu [[convmv]]-ohjelmalla.


=== NTFS ===
=== NTFS ===


NTFS on Microsoftin kehittämä tiedostojärjestelmä, ja sitä käytetään Windows-koneissa. Monet Linux-käytäjät pitävät koneellaan myös Windowsia ja liittävät Windowsin tiedostojärjestelmät osaksi Linux-järjestelmää, joten tässä yhteydessä on syytä kertoa, kuinka se tehdään mahdollisimman yhteensopivasti.
[[NTFS]] on Microsoftin kehittämä tiedostojärjestelmä, ja sitä käytetään Windows-koneissa. Monet Linux-käytäjät pitävät koneellaan myös Windowsia ja liittävät Windowsin kiintolevyosiot osaksi Linux-järjestelmää, joten tässä yhteydessä on syytä kertoa, kuinka se tehdään mahdollisimman yhteensopivasti.


NTFS tukee Unicodea, ja se tallentaa tiedostojen nimet aina UTF-16-muodossa. Jotta kaikki tiedostojen nimet näkyisivät oikein Linuxissa, täytyy Linuxissa olla käytössä UTF-8-lokaali. Lisäksi NTFS-tiedostojärjestelmää liitettäessä täytyy [[mount]]-komennolle kertoa, että NTFS:llä olevien tiedostojen nimet täytyy muuttaa Linuxin ymmärtämään UTF-8-muotoon. Tämä tapahtuu antamalla [[mount]]-komennolle optioksi ”nls=utf8”. Sen voi tehdä esimerkiksi [[fstab|/etc/fstab]]-tiedostossa seuraavan esimerkin tapaan:
NTFS tukee Unicodea, ja se tallentaa tiedostojen nimet aina UTF-16-muodossa. Jotta kaikki tiedostojen nimet näkyisivät oikein Linuxissa, täytyy Linuxissa olla käytössä UTF-8-lokaali. NTFS-tiedostojärjestelmää liitettäessä täytyy [[mount]]-komennolle vielä kertoa, mikä merkistö Linuxissa on käytössä, koska vasta tämän tiedon avulla NTFS:llä olevat tiedostojen nimet osataan muuttaa UTF-16:sta Linuxin ymmärtämään muotoon. UTF-8-lokaalia käytettäessä annetaan [[mount]]-komennolle optioksi ”nls=utf8”. Sen voi tehdä esimerkiksi [[fstab|/etc/fstab]]-tiedostossa seuraavan esimerkin tapaan:
  /dev/hdb1  /media/windows-c  ntfs  nls=utf8,uid=1000  0  0
  /dev/hdb1  /media/windows-c  ntfs  nls=utf8,uid=1000  0  0
Katso lisätietoja [[fstab]]-sivulta sekä Linuxista komennoilla <tt>man mount</tt> ja <tt>man fstab</tt>.
Katso lisätietoja artikkelista [[fstab]] sekä Linuxista komennoilla <tt>man mount</tt> ja <tt>man fstab</tt>.
 
Jos käytössä on uudempi [[ntfs-3g]]-ajuri, käytetään optiota ”locale=fi_FI.UTF-8”:
 
/dev/hdb1  /media/windows-c  ntfs-3g  locale=fi_FI.UTF-8  0  0


=== FAT ===
=== FAT ===


Myös FAT on Microsoftin kehittämä tiedostojärjestelmä. Sitä käytetään paitsi Windowsissa mutta hyvin yleisesti myös USB-muistien, digikameroiden ja kannettavien MP3-soittimien tiedostojärjestelmänä. Myös FAT tukee Unicodea, ja se periaatteessa tallentaa tiedostojen nimet UTF-16-muodossa. Ikänsä vuoksi se tukee kuitenkin vain Unicoden ensimmäisiä versioita ja merkkejä vain nk. Basic Multilingual Planesta (U+0000..U+FFFF). FATin tukema merkkivalikoima käsittää kuitenkin suurimman osan maailman kirjoitusmerkeistä, joten sen Unicode-tuki on useimpien kielten näkökulmasta varsin hyvä.
Myös [[FAT]] on Microsoftin kehittämä tiedostojärjestelmä. Sitä käytetään paitsi Windowsissa hyvin yleisesti myös USB-muistien, digikameroiden ja kannettavien MP3-soittimien tiedostojärjestelmänä. Pitkissä tiedostojen nimissä myös FAT tukee Unicodea, mutta vanhemmassa muodossa UCS-2, joka eroaa UTF-16:sta tukemalla vain Unicoden ensimmäisiä versioita ja merkkejä nk. Basic Multilingual Planesta (U+0000..U+FFFF). FATin tukema merkkivalikoima käsittää kuitenkin useimpien kielten tavallisesti käytetyt kirjoitusmerkit, joten sen Unicode-tuki on nykykielten näkökulmasta hyvä.


Samoin kuin NTFS:ssä, myös FAT-tiedostojärjestelmää liitettäessä täytyy Linuxille kertoa, mihin muotoon tiedostojen nimet täytyy muuttaa. Käytettäessä Linuxissa UTF-8-lokaalia, täytyy FAT-tiedostojärjestelmä liittää Linuxiin antamalla [[mount]]-komennolle optioksi ”utf8”. Siten [[fstab|/etc/fstab]]-tiedostoon laitettaisiin esimerkiksi rivi:
Samoin kuin NTFS:ssä, myös FAT-tiedostojärjestelmää liitettäessä täytyy Linuxille kertoa, mihin muotoon tiedostojen nimet täytyy muuttaa. Käytettäessä Linuxissa UTF-8-lokaalia, täytyy FAT-tiedostojärjestelmä liittää Linuxiin antamalla [[mount]]-komennolle optioksi ”utf8”. Siten [[fstab|/etc/fstab]]-tiedostoon laitettaisiin esimerkiksi rivi:
  /dev/hdb5  /media/windows-d  vfat  utf8,dmask=777,fmask=666  0  0
  /dev/hdb5  /media/windows-d  vfat  utf8,dmask=777,fmask=666  0  0


== Ohjelmat ==
== Tekstitiedostot ja tekstieditorit ==


Eräät, varsinkin vanhemmat, ohjelmat eivät hallitse UTF-8-merkistökoodauksen käyttöä. Tällaisia ovat mm. uutistenlukija [[slrn]] ja vanhemmat versiot [[Nano]]sta. Slrn tosin osaa näyttää UTF-8:lla koodatut kirjoitukset oikein siinä määrin kun niissä olevat merkit sopivat johonkin kahdeksanbittiseen merkistöön, mutta ei toimi mikäli pääteikkunassakin on UTF-8 käytössä.
Jos omassa Linux-järjestelmässä on aiemmin ollut käytössä ISO-8859-15-merkistö (esimerkiksi lokaali fi_FI@euro) ja sittemmin on siirrytty UTF-8:aan, täytyy omat tekstitiedostot muuttaa UTF-8-koodatuiksi, jotta niiden sisältö näkyisi oikein. Yksi tapa tekstitiedoston muuttamiseen UTF-8-koodaukseen on avata se johonkin tekstieditoriin ja tallentaa sitten teksti uudella koodauksella. Nopeampaa saattaa kuitenkin olla komentotulkin ja [[recode]]-ohjelman käyttö:
 
recode ISO-8859-15..UTF-8 tiedosto.txt


Tällaista ohjelmaa voi käyttää luit-ohjelman avulla esimerkiksi näin.
  for file in *.php; do recode ISO-8859-15..UTF-8 "$file"; done
  LC_ALL=en_US.ISO-8859-1 luit ohjelmannimi
Samaa komentoa voi käyttää myös ottaessasi ssh-yhteyden sellaiseen koneeseen, jossa käytetään jotakin 8-bittistä merkistöä.


Myöskään kaikki graafiset ohjelmat eivät hallitse UTF-8:aa, esimerkiksi [[Dillo]]-selain ei toistaiseksi osaa näyttää sillä koodattuja www-sivuja.
Toinen tiedostokoodauksen muuttamiseen tarkoitettu ohjelma on [[iconv]]. Tiedostojen nimissä käytetyn merkistön muuntaminen onnistuu [[convmv]]-nimisellä ohjelmalla.


=== Emacs ===
=== Emacs ===


GNU [[Emacs]] toimii UTF-8:n kanssa, kunhan .emacsrc:ssä on seuraava rivi.
GNU [[Emacs]] toimii versiosta 22 alkaen automaattisesti UTF-8:n kanssa. Emacs 21:ssä on <tt>.emacs</tt>-asetustiedostoon lisättävä seuraavat rivit (tuki 21:ssä ei ole ongelmaton, katso esim. Debianin bugitietokanta):
  (prefer-coding-system 'utf-8) (set-keyboard-coding-system 'utf-8) (set-terminal-coding-system 'utf-8)
 
  (when (= emacs-major-version 21)
  (prefer-coding-system 'utf-8)
  (set-keyboard-coding-system 'utf-8)
  (set-terminal-coding-system 'utf-8))


=== Vim ===
=== Vim ===


[[Vim]] tukee UTF-8:aa automaattisesti, jos käytössä on UTF-8-lokaali. Nykyiset Vimin versiot tukevat kutakuinkin täydellisesti kaikkia muitakin merkistöjä ja eri koodaustapoja. Tallennettavan tiedoston merkistöön voi vaikuttaa muuttujan 'fileencoding' avulla. Muokattavan tekstin merkistö on muuttujassa 'encoding'.
[[Vim]] tukee UTF-8:aa automaattisesti, jos käytössä on UTF-8-lokaali. Nykyiset Vimin versiot tukevat kutakuinkin täydellisesti kaikkia muitakin merkistöjä ja eri koodaustapoja. Tallennettavan tiedoston merkistöön voi vaikuttaa muuttujan 'fileencoding' avulla.
 
== Muut ohjelmat ==
 
Eräät, varsinkin vanhemmat, ohjelmat eivät hallitse UTF-8-merkistökoodauksen käyttöä. Tällaisia ovat mm. uutistenlukija [[slrn]] ja vanhemmat versiot [[Nano]]sta. Slrn tosin osaa näyttää UTF-8:lla koodatut kirjoitukset oikein siinä määrin kun niissä olevat merkit sopivat johonkin kahdeksanbittiseen merkistöön, mutta ei toimi mikäli pääteikkunassakin on UTF-8 käytössä.
 
Tällaista ohjelmaa voi käyttää [[luit]]-ohjelman avulla esimerkiksi näin.
LC_ALL=en_US.ISO-8859-1 luit ohjelmannimi
Samaa komentoa voi käyttää myös ottaessasi ssh-yhteyden sellaiseen koneeseen, jossa käytetään jotakin 8-bittistä merkistöä.
 
Myöskään kaikki graafiset ohjelmat eivät hallitse UTF-8:aa, esimerkiksi [[Dillo]]-selain ei toistaiseksi osaa näyttää sillä koodattuja www-sivuja.


== IRC ==
== IRC ==


Nykyisin suomalaisilla IRC-kanavilla käytetään enimmäkseen vanhoja 8-bittisiä merkistöjä, joilla esiintyy edellä kuvattuja ongelmia. Tästä syystä siirros UTF-8:n käyttöön on pikkuhiljaa tapahtumassa, mutta sitä luonnollisesti hidastaa se, että monet clientit eivät tue ko. merkistöä lainkaan ilman erillisiä scriptejä ja toisaalta se että vain muutama client saadaan tukemaan vanhaa 8-bittistä ja UTF-8:a samaan aikaan, siten että muiden kirjoittamat tekstit näkyisivät oikein riippumatta siitä kumpaa käytetään. Tilanne onneksi kuitenkin paranee kaiken aikaa ja on selvää että UTF-8:n käyttöön tullaan tulevaisuudessa siirtymään kokonaan. Siirros ei kuitenkaan missään tapauksessa tule tapahtumaan yhden yön aikana, joten olisi toivottavaa että mahdollisimman monista clienteistä löytyisi sekakäytön mahdollistava merkistön autodetectointi. Muutamilla kanavilla sai vuodenvaihteessa merkittävää kannatusta merkistönvaihtopäiväksi valittu päivämäärä 1.1.2006, ja siirtyminen tehtiin joillain [http://wiki.tukaani.org/utf-8_ja_irc-kanavat kanavilla] kokonaan. Nämä kanavat ovat kuitenkin ainakin toistaiseksi pieni vähemmistö.
Nykyisin suomalaisilla IRC-kanavilla käytetään enimmäkseen vanhoja 8-bittisiä merkistöjä, joilla esiintyy edellä kuvattuja ongelmia. Tästä syystä siirros UTF-8:n käyttöön on pikkuhiljaa tapahtumassa, mutta siirrosta luonnollisesti hidastaa se, että monet asiakasohjelmat eivät tue UTF-8-merkistöä lainkaan ilman erillisiä skriptejä ja toisaalta myös se, että vain muutama asiakasohjelma saadaan tukemaan vanhaa 8-bittistä ja UTF-8:a samaan aikaan jolloin muiden kirjoittamat tekstit näkyisivät oikein riippumatta siitä, kumpaa merkistöä käytetään. Tilanne onneksi kuitenkin paranee kaiken aikaa ja on selvää että UTF-8:n käyttöön tullaan tulevaisuudessa siirtymään kokonaan. Siirros ei kuitenkaan missään tapauksessa tule tapahtumaan yhden yön aikana, joten olisi toivottavaa että mahdollisimman monista asiakasohjelmista löytyisi sekakäytön mahdollistava merkistön automaattinen tunnistus.
 
Alla on lueteltu tärkeimpien IRC-ohjelmien UTF-8-yhteensopivuus.
Alla on lueteltu tärkeimpien IRC-ohjelmien UTF-8-yhteensopivuus.


Rivi 70: Rivi 82:
=== Irssi ===
=== Irssi ===


Irssi 0.8.10 tukee merkistömuutoksia nykyisessä vakaassa versiossaan ja sitä edeltäneissä release candidateissa rc5:stä eteenpäin. Tämä mahdollistaa merkistön valinnan kanavakohtaisesti, kuten myös sen, että tästä riippumatta voidaan esimerkiksi logit kirjoittaa aina UTF-8-muodossa.  Tärkeimmät asetukset ovat /set term_charset <merkistö> (asettaa terminaalin käyttämän merkistön), /set recode_out_default_charset (asettaa oletusmerkistön lähtevälle tekstille) ja /recode add <merkistö> (asettaa aktiivisessa ikkunassa käytettävän merkistön). Merkistön automaattinen tunnistus toimii käytännössä luotettavasti.
[[Irssi]] 0.8.10 tukee merkistömuutoksia nykyisessä vakaassa versiossaan ja sitä edeltäneissä julkaisuehdokkaissa rc5:stä eteenpäin. Tämä mahdollistaa merkistön valinnan kanavakohtaisesti, kuten myös sen, että tästä riippumatta voidaan esimerkiksi lokit kirjoittaa aina UTF-8-muodossa.  Tärkeimmät asetukset ovat <tt>/set term_charset <nowiki><merkistö></nowiki></tt> (asettaa terminaalin käyttämän merkistön, yleensä UTF-8), <tt>/set recode_out_default_charset</tt> (asettaa oletusmerkistön lähtevälle tekstille, yleensä UTF-8 tai ISO-8859-15) ja <tt>/recode add <nowiki><merkistö></nowiki></tt> (asettaa aktiivisessa ikkunassa käytettävän merkistön). Merkistön automaattinen tunnistus toimii käytännössä luotettavasti.


Irssi 0.8.10rc4 ja vanhemmat eivät sisällä sisäänrakennettua merkistömuunnostukea. /set term_type utf8 tai /set term_type 8bit asetettava terminaalin tyypin mukaisesti. Merkistömuunnostuen saa scripteillä recode.pl ja recode_ion.pl tai pluginilla charconv. Älä asenna useampaa samanaikaisesti, yksi riittää. rc5 ja rc6-versioissa recode-toiminto oli kehitysasteella, joten toimivuus ja ominaisuudet eivät ole täydellisiä. Mikäli mahdollista, nämä versiot kannattaa tietenkin päivittää uusimpaan vakaaseen versioon.
Irssi 0.8.10rc4 ja vanhemmat eivät sisällä sisäänrakennettua merkistömuunnostukea. <tt>/set term_type utf8</tt> tai <tt>/set term_type 8bit</tt> on asetettava terminaalin tyypin mukaisesti. Merkistömuunnostuen saa skripteillä recode.pl ja recode_ion.pl tai liitännäisellä charconv. Älä asenna useampaa samanaikaisesti, yksi riittää. rc5 ja rc6-versioissa recode-toiminto oli kehitysasteella, joten toimivuus ja ominaisuudet eivät ole täydellisiä. Mikäli mahdollista, nämä versiot kannattaa tietenkin päivittää uusimpaan vakaaseen versioon.


Erään ongelman muodostavat kanavat, joiden nimissä käytetään esimerkiksi Latin1-merkkejä, suomenkielisillä kanavilla yleensä ääkkösiä. UTF-8-terminaalilla niitä ei suoraan voi kirjoittaa ja UTF-8:lla kirjoitettu kanava #ääkkönen tietenkin on irc-serverin kannalta täysin eri kanava kuin vastaava nimi Latin1:llä kirjoitettuna. Ongelman voi kiertää esimerkiksi käyttämällä komennon ''/join #ääkkönen'' sijaan ''/eval''-komentoa, jolloin merkkien numerokoodeja voidaan kirjoittaa suoraan esimerkiksi oktaaleina: ''/eval /join \344\344kk\366nen''. Merkkien koodeja voi tarkistaa esimerkiksi [http://www.cs.tut.fi/~jkorpela/latin1.html tästä taulukosta].
Erään ongelman muodostavat kanavat, joiden nimissä käytetään esimerkiksi Latin1-merkkejä, suomenkielisillä kanavilla yleensä ääkkösiä. UTF-8-terminaalilla niitä ei suoraan voi kirjoittaa ja UTF-8:lla kirjoitettu kanava #ääkkönen tietenkin on irc-palvelimen kannalta täysin eri kanava kuin vastaava nimi Latin1:llä kirjoitettuna. Ongelman voi kiertää esimerkiksi käyttämällä komennon <tt>/join #ääkkönen</tt> sijaan <tt>/eval</tt>-komentoa, jolloin merkkien numerokoodeja voidaan kirjoittaa suoraan esimerkiksi oktaaleina: <tt>/eval /join \344\344kk\366nen</tt>. Merkkien koodeja voi tarkistaa esimerkiksi [http://www.cs.tut.fi/~jkorpela/latin1.html tästä taulukosta].


=== KVIrc ===
=== KVIrc ===


IRC-client [[QT]]/[[KDE|KDE:lle]]. Tukee suoraan autodetectointia. Yläkulmassa on kiinalainen kirjoitusmerkki, josta voi valita merkistön kanavakohtaisesti (myös verkkokohtainen ja ohjelmanlaajuinen merkistön valinta on mahdollista). UTF-8:n recode vanhaan muotoon onnistuu valinnalla Smart-alavalikon valinnalla <tt>UTF-8/ISO-8859-15 ( UTF-8? -> Western, Latin 1 + Euro)</tt>.
IRC-client [[QT]]/[[KDE|KDE:lle]]. Tukee suoraan merkistön automaattista tunnistusta. Yläkulmassa on kiinalainen kirjoitusmerkki, josta voi valita merkistön kanavakohtaisesti (myös verkkokohtainen ja ohjelmanlaajuinen merkistön valinta on mahdollista). UTF-8:n recode vanhaan muotoon onnistuu valinnalla Smart-alavalikon valinnalla <tt>UTF-8/ISO-8859-15 ( UTF-8? -> Western, Latin 1 + Euro)</tt>.


KVirc on saatavilla myös Windowssille, joten sitä voi tarjota merkistöongelmista kärsiville mIRC:n käyttäjille.
KVirc on saatavilla myös Windowssille, joten sitä voi tarjota merkistöongelmista kärsiville mIRC:n käyttäjille.
Rivi 84: Rivi 96:
=== mIRC ===
=== mIRC ===


mIRC ei ole Linux-ohjelma, mutta monet käyttävät Windowsissa vanhoja versioita siitä ja valittavat UTF:stä juuri siksi että skandit eivät näy heillä. Kuitenkin mIRC:in uusi 17.2.2006 julkaistu versio 6.17 osaa näyttää oikein myös UTF-8 koodatut skandit ilman säätämistä!
mIRC ei ole Linux-ohjelma, mutta monet käyttävät Windowsissa vanhoja versioita siitä ja valittavat UTF:stä juuri siksi että skandit eivät näy heillä. Kuitenkin mIRCin uusin versio osaa näyttää oikein myös UTF-8-koodatut skandit oletusasetuksilla.


=== Wireless IRC ===
=== Wireless IRC ===


Ei tue autodetectointia, mutta asetuksista voi määritellä merkistöksi UTF-8:n.
Ei tue merkistön automaattista tunnistusta, mutta asetuksista voi määritellä merkistöksi UTF-8:n.


=== X-Chat ===
=== X-Chat ===


Verkkokohtainen merkistön valinta asetuksista. Autodetectointi vain silloin kun käytössä on UTF-8.
Verkkokohtainen merkistön voi valita asetuksista. Merkistön automaattinen tunnistus on käytössä vain kun UTF-8-merkistö on valittu.


X-Chatin sivustolta löytyy myös python-scripti (lamechan.py), jolla voi kanavakohtaisesti valita käytetäänkö UTF-8:aa vai jotain toista merkistöä. Tätä scriptiä ei ole saatu toimimaan X-Chatin Windows-versioilla.
X-Chatin sivustolta löytyy myös python-scripti (lamechan.py), jolla voi kanavakohtaisesti valita käytetäänkö UTF-8:aa vai jotain toista merkistöä. Tätä scriptiä ei ole saatu toimimaan X-Chatin Windows-versioilla.
=== HexChat ===
X-Chatin kaltainen, mutta UTF-8 merkistö on oletuksena käytössä.


=== jmIrc ===
=== jmIrc ===


Asetuksista voi määritellä merkistöksi UTF-8:n, tukee myös autodetectointia.
Asetuksista voi määritellä merkistöksi UTF-8:n, tukee myös merkistön automaattista tunnistusta.
 
=== WeeChat ===
 
WeeChat käyttää UTF-8-merkistökoodausta oletuksena lähetetyissä viesteissä ja tulkitsee sisäänpäin tulevat viestit aina niin ja elleivät ne ole UTF-8:aa, se käyttää asetusta charset.default.decode, jonka oletusarvo on iso-8859-1. Käytettävät merkistöt voi asettaa seuraavilla komennoilla:
<pre>
/set charset.default.decode <merkistö>
/set charset.default.encode UTF-8
</pre>
Jos WeeChatin halutaan tulkitsevan vain UTF-8:aa, tämä tapahtuu komennolla
/set charset.default.decode ""
 
== Tietoturva ==
 
Unicode tuo mukanaan joukon tietoturvaongelmia, ennen kautta siksi, että se on niin monimutkainen, eikä monikaan ohjelmoija ymmärrä kaikkia niitä mekanismeja, joita tarvitaan hänelle tuntemattomissa kielissä. Perustavanlaatuinen ongelma on, että merkkijonon pituus merkkeinä ei sano paljoakaan sen pituudesta ruudulla (tasaleveälläkään kirjamisella) tai tavuina &ndash; eikä päinvastoinkaan. Väärien oletusten varassa toimivat ohjelmat ja [[kirjasto|ohjelmakirjastot]] saattavat olla alttiita puskuriyliovuodoille yms. Tässä muutamia muita ongelmia:
 
Samaa merkkiä voidaan esittää eri tavoilla, esimerkiksi "ä" sellaisenaan tai "a":n ja pisteiden yhdistelmänä (tämä on ongelmallista myös merkkijonoja etsittäessä [[grep]]illä tms.). Jos merkkien esitystapaa muutetaan sen jälkeen, kun niiden vaarattomuus on tarkistettu, tarkistuksen voi ohittaa. Yksinkertaistettu algoritmi saattaa myös hyväksyä kiellettyjä koodaustapoja, joilla esimerkiksi ASCII-merkkejä voidaan koodata useammassa tavussa tarkistusten ohittamiseksi.
 
Näytöllä vaarattomalta näyttävä merkkijono on saatettu muodostaa käyttäen lähes samalta näyttäviä merkkejä, joilla kuitenkin on eri merkitys (vrt nokia.com vs. nokía.com). Vastaavaa voi saada aikaan kirjoitussuunnalla kikkailemalla.
 
==Eräitä Unicode-merkkejä==
* Lainausmerkit (yksin ja kaksin): ’ ’’ ” ”” 
* Kolme pistettä: … (U+2026 HORIZONTAL ELLIPSIS)
* Luetelmapallo: • (U+2022 BULLET)
 
===Viivamerkit===
*n‐viiva: – (U+2013 EN DASH)
Käyttö: Varsinaisena ajatusviivana. Ellipsiviiva (poisjätön merkki): 50,– euroa, –kele! Alkamisen ja loppumisen ääripäät: sivut 10–12, Helsingin–Hämeenlinnan rautatie. Lainatun tekstin erottamiseen. Luetteloviiva. Repliikkiviiva. Osapuolten erottamiseen: Paasikiven–Kekkosen linja.
*Yhdysmerkki: ‐ (U+2010 HYPHEN)
Käyttö: yhdysnimissä ja kun sanan toinen puolisko on erisnimi tai lyhenne: Maija‐Liisa Virtanen‐Mäkinen, SM‐kilpailu, Tampere‐talo. Tavuviivana. ”luuta‐akka”, ”pakastekaapit ja ‐arkut”, ”sydän‐ ja verisuonitaudit”
 
===Matematiikkaa===
 
* Peruslaskutoimitukset: + − × : ∕ (U+2215 DIVISION SLASH)
* Murtolukuja: ⅓ ⅔ ¼ ½ ¾ ⅕ ⅖ ⅗ ⅘ ⅙ ⅚ ⅛ ⅜ ⅝ ⅞
* ⁄ (U+2044 FRACTION SLASH)
* Yhtäläisyys ja epäyhtäläisyys: ≈ = ≠ < ≤ > ≥
* Yläindeksinumerot ja ‐merkit: ⁰ ¹ ² ³ ⁴ ⁵ ⁶ ⁷ ⁸ ⁹ ⁺ ⁻ ⁼ ⁽ ⁾ ⁿ ⁱ
* Alaindeksinumerot ja ‐merkit: ₀ ₁ ₂ ₃ ₄ ₅ ₆ ₇ ₈ ₉ ₊ ₋ ₌ ₍ ₎
* Muut
** ∶ (U+2236 RATIO)
** ⇒ ∞ ‰ ± °
 
===Kieliä===
*Englanti:
**— (U+2014 EM DASH)
**“ (U+201C LEFT DOUBLE QUOTATION MARK)
**‘ (U+2018 LEFT SINGLE QUOTATION MARK)
*Espanja: Ñ ñ ¿ ¡
*Esperanto: Ĉ ĉ Ĝ ĝ Ĥ ĥ Ĵ ĵ Ŝ ŝ Ŭ ŭ
*Norja ja tanska: Æ æ Ø ø
*Ranska: È É Ê Ë è é ê ë Ò Ó Ô ò ó ô Ç ç Ï ï
*Saksa: ẞ ß Ü ü
*Viro: Õ õ


== Linkkejä ==
===Sekalaisia===
* © ® ℗ ™ ℠ § ¶ µ € → ♀ ♂
*Teinixmäisyyksiä: ☺ ☹ ♥ ‽ ☠ ☢ ☣ ☮ ♫


* Virallinen merkistönvaihtopäivä ja tarkat ohjeet clientien säätämiseen [http://wiki.tukaani.org/irc_ja_utf-8 Tukaanin Wikissä]
==Aiheesta muualla==
* [http://wiki.tukaani.org/utf-8_ja_irc-kanavat IRC-kanavien UTF-8-säännöt]
* [[wikipedia:fi:Unicode|Unicode suomenkielisessä Wikipediassa]]
* [http://iki.fi/~juhtolv/unicode/suomi.html Suomen kielen kirjoittaminen Unicodea käyttäen]


[[Luokka:Verkko]]
[[Luokka:Verkko]]
[[Luokka:Järjestelmä]]
[[Luokka:Järjestelmä]]
[[Luokka:Käsitteet]]
[[Luokka:Käsitteet]]

Nykyinen versio 26. huhtikuuta 2022 kello 13.39

Linux.fi-wikissä artikkelit käsittelevät yleensä aihettaan siltä osin, kuin se koskee Linuxia ja avoimia/vapaita ohjelmistoja. Yleisluontoisemman artikkelin tästä aiheesta löydät tietosanakirja Wikipediasta.

Unicode on standardi, joka muun muassa määrittelee useimmille maailman kirjoitusmerkeille omat merkkikoodinsa. Standardin tarkoituksena on korvata tähän saakka käytössä olleet hyvin erilaiset ja keskenään huonosti yhteensopivat merkistöt. Suomessa on Linux-koneissa käytetty enimmäkseen ISO-8859-15-merkistöä. Vanhojen merkistöjen ongelma on, että niiden merkkivalikoima on hyvin rajallinen, esimerkiksi 256 merkkiä. Se yleensä tarkoittaa, että samalla merkistöllä ei voida esittää useita kovin erilaisia kieliä. Esimerkiksi sama tekstitiedosto tai sähköpostiviesti ei voi sisältää tekstiä kuin niillä kielillä, joita kyseisellä merkistöllä voidaan esittää. Tämä ei kenties häiritse yksittäistä tietokoneenkäyttäjää, mutta sitä mukaa, kun kansainvälinen tietoliikenne on lisääntynyt, on myös lisääntynyt tarve luoda kaikille yhteinen standardi kirjoitusmerkkien esittämiseksi.

Unicode pyrkii ratkaisemaan vanhojen merkistöjen rajallisuuteen liittyvät ongelmat luomalla merkistön, joka sisältää kaikki nykyiset (ja jopa entiset) kirjoitusjärjestelmät. Unicode-standardi käsittää 1 114 112 merkkipaikkaa, ja ne yksilöidään U+xxxx-muotoisella tunnuksella, jossa ”xxxx” on merkin numerokoodi heksadesimaalimuodossa (16-järjestelmä). Mahdolliset koodit ovat U+0000..U+10FFFF. Käytännössä ihan jokainen merkkipaikka ei viittaa mihinkään kirjoitusmerkkiin, vaan mukana on jonkin verran myös erilaisia ohjauskoodeja tietokonetta varten sekä Unicode-standardiin liittyvää erikoistietoa. Joka tapauksessa merkkipaikkoja on niin paljon, että kaikki olemassa olevat ja jo historiaan jääneet kirjoitusmerkit mahtuvan mukaan. Tästä huolimatta merkkipaikkoja on runsaasti tyhjillään tulevaisuuden varalta ja kaikkia tuskin tarvitaan koskaan. Mukana on myös suuri joukko tarkoituksella määrittelemättömiä, yksityiseen käyttöön varattuja merkkipaikkoja.

Unicode-merkkejä sisältävää tekstiä voidaan tallentaa tietokoneelle useilla eri tavoilla. Linuxissa ja yleensäkin tietoliikenteessä käytetty Unicoden koodaustapa on nimeltään UTF-8. Tässä koodauksessa yksi Unicode-merkki vie tallennustilaa 1–4 oktettia eli 8 bitin tavua. ASCII-merkistöön kuuluvat merkit (U+0000..U+007F) esitetään UTF-8:ssa sellaisenaan, yhtenä tavuna, joten ASCII on täysin UTF-8-yhteensopiva. Se onkin Linuxissa tärkeää, koska siinä käytetään paljon ASCII-muodossa olevia asetustiedostoja ja käynnistysskriptejä. Muiden kuin ASCII-merkkien esittämiseksi tarvitaan avuksi lisätavuja, ja esimerkiksi suomen kieleen kuuluvien ä- ja ö-kirjainten esittämiseen tarvitaan kaksi tavua.

UTF-8:n lisäksi on olemassa muitakin koodaustapoja, esimerkiksi UTF-16 ja UTF-32. UTF-16:ssa merkit esitetään joko yhtenä 16-bittisenä lukuna, tai mikäli merkin koodi on sitä suurempi, niin kahden 16-bittisen luvun muodostamana nk. sijaismerkkiparina (surrogate pair). UTF-32:ssa merkki esitetään aina yhtenä 32-bittisenä lukuna. Kuten todettu, Linuxissa käytetään pääasiassa UTF-8:aa. Ohjelmat voivat kuitenkin sisäisesti käyttää muitakin koodaustapoja, ja ohjelmien tekijät voivat vapaasti valita omaan ohjelmaansa sopivan tavan tallentaa tietoa.

Nykyisin monet Linux-jakelut käyttävät UTF-8:aa oletuksena. Tämän voi havaita siitä, että järjestelmän käyttämien lokaalien nimessä on ”.UTF-8”. Esimerkiksi Suomessa käytetään lokaalia nimeltä ”fi_FI.UTF-8”. Tällaista lokaalia käytettäessä järjestelmä tukee Unicodea ja mm. tiedostojen nimiin ja tekstitiedostoihin on periaatteessa mahdollista kirjoittaa kaikkia Unicode-merkkejä. Käytännössä mikään fontti ei yksinään kykene näyttämään kaikkia merkkejä.

Tiedostojärjestelmät[muokkaa]

Ext3 ja muut Unixien tiedostojärjestelmät[muokkaa]

Ext3 on Linuxissa yleisesti käytetty tiedostojärjestelmä. Se tukee täydellisesti Unicodea ja UTF-8:aa mutta tekee sen tavallaan tietämättään. Samoin on asia muissakin tiedostojärjestelmissä, joita käytetään Linuxissa ja Unix-tyyppisissä käyttöjärjestelmissä. Tiedostojärjestelmät eivät välitä, mitä merkkejä tiedostojen nimissä on, eivätkä ne tallenna mitään tietoa käytetystä merkistöstä tai sen koodaustavasta. Kiellettyjä merkkejä Linuxin tiedostojärjestelmissä ovat ainoastaan nollatavu (ASCII NUL, U+0000) ja vinoviiva (”/”, U+002F).

Tiedostojärjestelmää lukiessaan Linux tulkitsee tiedostojen nimet käytössä olevan lokaalin perusteella. Jos käytössä on UTF-8-lokaali (esimerkiksi fi_FI.UTF-8), niin järjestelmä tulkitsee, että tiedostojen nimet ovat UTF-8-koodattuja. Tästä seuraa sellainen ikävä asia, että jos tiedostojen nimet on kirjoitettu käyttäen eri lokaalia kuin mikä parhaillaan on käytössä, todennäköisesti nimet eivät näy oikein. Tiedostojen nimien muuttaminen merkistökoodauksesta toiseen onnistuu convmv-ohjelmalla.

NTFS[muokkaa]

NTFS on Microsoftin kehittämä tiedostojärjestelmä, ja sitä käytetään Windows-koneissa. Monet Linux-käytäjät pitävät koneellaan myös Windowsia ja liittävät Windowsin kiintolevyosiot osaksi Linux-järjestelmää, joten tässä yhteydessä on syytä kertoa, kuinka se tehdään mahdollisimman yhteensopivasti.

NTFS tukee Unicodea, ja se tallentaa tiedostojen nimet aina UTF-16-muodossa. Jotta kaikki tiedostojen nimet näkyisivät oikein Linuxissa, täytyy Linuxissa olla käytössä UTF-8-lokaali. NTFS-tiedostojärjestelmää liitettäessä täytyy mount-komennolle vielä kertoa, mikä merkistö Linuxissa on käytössä, koska vasta tämän tiedon avulla NTFS:llä olevat tiedostojen nimet osataan muuttaa UTF-16:sta Linuxin ymmärtämään muotoon. UTF-8-lokaalia käytettäessä annetaan mount-komennolle optioksi ”nls=utf8”. Sen voi tehdä esimerkiksi /etc/fstab-tiedostossa seuraavan esimerkin tapaan:

/dev/hdb1   /media/windows-c   ntfs   nls=utf8,uid=1000   0   0

Katso lisätietoja artikkelista fstab sekä Linuxista komennoilla man mount ja man fstab.

Jos käytössä on uudempi ntfs-3g-ajuri, käytetään optiota ”locale=fi_FI.UTF-8”:

/dev/hdb1   /media/windows-c   ntfs-3g   locale=fi_FI.UTF-8   0   0

FAT[muokkaa]

Myös FAT on Microsoftin kehittämä tiedostojärjestelmä. Sitä käytetään paitsi Windowsissa hyvin yleisesti myös USB-muistien, digikameroiden ja kannettavien MP3-soittimien tiedostojärjestelmänä. Pitkissä tiedostojen nimissä myös FAT tukee Unicodea, mutta vanhemmassa muodossa UCS-2, joka eroaa UTF-16:sta tukemalla vain Unicoden ensimmäisiä versioita ja merkkejä nk. Basic Multilingual Planesta (U+0000..U+FFFF). FATin tukema merkkivalikoima käsittää kuitenkin useimpien kielten tavallisesti käytetyt kirjoitusmerkit, joten sen Unicode-tuki on nykykielten näkökulmasta hyvä.

Samoin kuin NTFS:ssä, myös FAT-tiedostojärjestelmää liitettäessä täytyy Linuxille kertoa, mihin muotoon tiedostojen nimet täytyy muuttaa. Käytettäessä Linuxissa UTF-8-lokaalia, täytyy FAT-tiedostojärjestelmä liittää Linuxiin antamalla mount-komennolle optioksi ”utf8”. Siten /etc/fstab-tiedostoon laitettaisiin esimerkiksi rivi:

/dev/hdb5   /media/windows-d   vfat   utf8,dmask=777,fmask=666   0   0

Tekstitiedostot ja tekstieditorit[muokkaa]

Jos omassa Linux-järjestelmässä on aiemmin ollut käytössä ISO-8859-15-merkistö (esimerkiksi lokaali fi_FI@euro) ja sittemmin on siirrytty UTF-8:aan, täytyy omat tekstitiedostot muuttaa UTF-8-koodatuiksi, jotta niiden sisältö näkyisi oikein. Yksi tapa tekstitiedoston muuttamiseen UTF-8-koodaukseen on avata se johonkin tekstieditoriin ja tallentaa sitten teksti uudella koodauksella. Nopeampaa saattaa kuitenkin olla komentotulkin ja recode-ohjelman käyttö:

recode ISO-8859-15..UTF-8 tiedosto.txt
for file in *.php; do recode ISO-8859-15..UTF-8 "$file"; done

Toinen tiedostokoodauksen muuttamiseen tarkoitettu ohjelma on iconv. Tiedostojen nimissä käytetyn merkistön muuntaminen onnistuu convmv-nimisellä ohjelmalla.

Emacs[muokkaa]

GNU Emacs toimii versiosta 22 alkaen automaattisesti UTF-8:n kanssa. Emacs 21:ssä on .emacs-asetustiedostoon lisättävä seuraavat rivit (tuki 21:ssä ei ole ongelmaton, katso esim. Debianin bugitietokanta):

(when (= emacs-major-version 21)
  (prefer-coding-system 'utf-8)
  (set-keyboard-coding-system 'utf-8)
  (set-terminal-coding-system 'utf-8))

Vim[muokkaa]

Vim tukee UTF-8:aa automaattisesti, jos käytössä on UTF-8-lokaali. Nykyiset Vimin versiot tukevat kutakuinkin täydellisesti kaikkia muitakin merkistöjä ja eri koodaustapoja. Tallennettavan tiedoston merkistöön voi vaikuttaa muuttujan 'fileencoding' avulla.

Muut ohjelmat[muokkaa]

Eräät, varsinkin vanhemmat, ohjelmat eivät hallitse UTF-8-merkistökoodauksen käyttöä. Tällaisia ovat mm. uutistenlukija slrn ja vanhemmat versiot Nanosta. Slrn tosin osaa näyttää UTF-8:lla koodatut kirjoitukset oikein siinä määrin kun niissä olevat merkit sopivat johonkin kahdeksanbittiseen merkistöön, mutta ei toimi mikäli pääteikkunassakin on UTF-8 käytössä.

Tällaista ohjelmaa voi käyttää luit-ohjelman avulla esimerkiksi näin.

LC_ALL=en_US.ISO-8859-1 luit ohjelmannimi

Samaa komentoa voi käyttää myös ottaessasi ssh-yhteyden sellaiseen koneeseen, jossa käytetään jotakin 8-bittistä merkistöä.

Myöskään kaikki graafiset ohjelmat eivät hallitse UTF-8:aa, esimerkiksi Dillo-selain ei toistaiseksi osaa näyttää sillä koodattuja www-sivuja.

IRC[muokkaa]

Nykyisin suomalaisilla IRC-kanavilla käytetään enimmäkseen vanhoja 8-bittisiä merkistöjä, joilla esiintyy edellä kuvattuja ongelmia. Tästä syystä siirros UTF-8:n käyttöön on pikkuhiljaa tapahtumassa, mutta siirrosta luonnollisesti hidastaa se, että monet asiakasohjelmat eivät tue UTF-8-merkistöä lainkaan ilman erillisiä skriptejä ja toisaalta myös se, että vain muutama asiakasohjelma saadaan tukemaan vanhaa 8-bittistä ja UTF-8:a samaan aikaan jolloin muiden kirjoittamat tekstit näkyisivät oikein riippumatta siitä, kumpaa merkistöä käytetään. Tilanne onneksi kuitenkin paranee kaiken aikaa ja on selvää että UTF-8:n käyttöön tullaan tulevaisuudessa siirtymään kokonaan. Siirros ei kuitenkaan missään tapauksessa tule tapahtumaan yhden yön aikana, joten olisi toivottavaa että mahdollisimman monista asiakasohjelmista löytyisi sekakäytön mahdollistava merkistön automaattinen tunnistus. Alla on lueteltu tärkeimpien IRC-ohjelmien UTF-8-yhteensopivuus.

ChatZilla[muokkaa]

Merkistö on valittavissa valikosta, ei automaattista tunnistusta.

Irssi[muokkaa]

Irssi 0.8.10 tukee merkistömuutoksia nykyisessä vakaassa versiossaan ja sitä edeltäneissä julkaisuehdokkaissa rc5:stä eteenpäin. Tämä mahdollistaa merkistön valinnan kanavakohtaisesti, kuten myös sen, että tästä riippumatta voidaan esimerkiksi lokit kirjoittaa aina UTF-8-muodossa. Tärkeimmät asetukset ovat /set term_charset <merkistö> (asettaa terminaalin käyttämän merkistön, yleensä UTF-8), /set recode_out_default_charset (asettaa oletusmerkistön lähtevälle tekstille, yleensä UTF-8 tai ISO-8859-15) ja /recode add <merkistö> (asettaa aktiivisessa ikkunassa käytettävän merkistön). Merkistön automaattinen tunnistus toimii käytännössä luotettavasti.

Irssi 0.8.10rc4 ja vanhemmat eivät sisällä sisäänrakennettua merkistömuunnostukea. /set term_type utf8 tai /set term_type 8bit on asetettava terminaalin tyypin mukaisesti. Merkistömuunnostuen saa skripteillä recode.pl ja recode_ion.pl tai liitännäisellä charconv. Älä asenna useampaa samanaikaisesti, yksi riittää. rc5 ja rc6-versioissa recode-toiminto oli kehitysasteella, joten toimivuus ja ominaisuudet eivät ole täydellisiä. Mikäli mahdollista, nämä versiot kannattaa tietenkin päivittää uusimpaan vakaaseen versioon.

Erään ongelman muodostavat kanavat, joiden nimissä käytetään esimerkiksi Latin1-merkkejä, suomenkielisillä kanavilla yleensä ääkkösiä. UTF-8-terminaalilla niitä ei suoraan voi kirjoittaa ja UTF-8:lla kirjoitettu kanava #ääkkönen tietenkin on irc-palvelimen kannalta täysin eri kanava kuin vastaava nimi Latin1:llä kirjoitettuna. Ongelman voi kiertää esimerkiksi käyttämällä komennon /join #ääkkönen sijaan /eval-komentoa, jolloin merkkien numerokoodeja voidaan kirjoittaa suoraan esimerkiksi oktaaleina: /eval /join \344\344kk\366nen. Merkkien koodeja voi tarkistaa esimerkiksi tästä taulukosta.

KVIrc[muokkaa]

IRC-client QT/KDE:lle. Tukee suoraan merkistön automaattista tunnistusta. Yläkulmassa on kiinalainen kirjoitusmerkki, josta voi valita merkistön kanavakohtaisesti (myös verkkokohtainen ja ohjelmanlaajuinen merkistön valinta on mahdollista). UTF-8:n recode vanhaan muotoon onnistuu valinnalla Smart-alavalikon valinnalla UTF-8/ISO-8859-15 ( UTF-8? -> Western, Latin 1 + Euro).

KVirc on saatavilla myös Windowssille, joten sitä voi tarjota merkistöongelmista kärsiville mIRC:n käyttäjille.

mIRC[muokkaa]

mIRC ei ole Linux-ohjelma, mutta monet käyttävät Windowsissa vanhoja versioita siitä ja valittavat UTF:stä juuri siksi että skandit eivät näy heillä. Kuitenkin mIRCin uusin versio osaa näyttää oikein myös UTF-8-koodatut skandit oletusasetuksilla.

Wireless IRC[muokkaa]

Ei tue merkistön automaattista tunnistusta, mutta asetuksista voi määritellä merkistöksi UTF-8:n.

X-Chat[muokkaa]

Verkkokohtainen merkistön voi valita asetuksista. Merkistön automaattinen tunnistus on käytössä vain kun UTF-8-merkistö on valittu.

X-Chatin sivustolta löytyy myös python-scripti (lamechan.py), jolla voi kanavakohtaisesti valita käytetäänkö UTF-8:aa vai jotain toista merkistöä. Tätä scriptiä ei ole saatu toimimaan X-Chatin Windows-versioilla.

HexChat[muokkaa]

X-Chatin kaltainen, mutta UTF-8 merkistö on oletuksena käytössä.

jmIrc[muokkaa]

Asetuksista voi määritellä merkistöksi UTF-8:n, tukee myös merkistön automaattista tunnistusta.

WeeChat[muokkaa]

WeeChat käyttää UTF-8-merkistökoodausta oletuksena lähetetyissä viesteissä ja tulkitsee sisäänpäin tulevat viestit aina niin ja elleivät ne ole UTF-8:aa, se käyttää asetusta charset.default.decode, jonka oletusarvo on iso-8859-1. Käytettävät merkistöt voi asettaa seuraavilla komennoilla:

/set charset.default.decode <merkistö>
/set charset.default.encode UTF-8

Jos WeeChatin halutaan tulkitsevan vain UTF-8:aa, tämä tapahtuu komennolla

/set charset.default.decode ""

Tietoturva[muokkaa]

Unicode tuo mukanaan joukon tietoturvaongelmia, ennen kautta siksi, että se on niin monimutkainen, eikä monikaan ohjelmoija ymmärrä kaikkia niitä mekanismeja, joita tarvitaan hänelle tuntemattomissa kielissä. Perustavanlaatuinen ongelma on, että merkkijonon pituus merkkeinä ei sano paljoakaan sen pituudesta ruudulla (tasaleveälläkään kirjamisella) tai tavuina – eikä päinvastoinkaan. Väärien oletusten varassa toimivat ohjelmat ja ohjelmakirjastot saattavat olla alttiita puskuriyliovuodoille yms. Tässä muutamia muita ongelmia:

Samaa merkkiä voidaan esittää eri tavoilla, esimerkiksi "ä" sellaisenaan tai "a":n ja pisteiden yhdistelmänä (tämä on ongelmallista myös merkkijonoja etsittäessä grepillä tms.). Jos merkkien esitystapaa muutetaan sen jälkeen, kun niiden vaarattomuus on tarkistettu, tarkistuksen voi ohittaa. Yksinkertaistettu algoritmi saattaa myös hyväksyä kiellettyjä koodaustapoja, joilla esimerkiksi ASCII-merkkejä voidaan koodata useammassa tavussa tarkistusten ohittamiseksi.

Näytöllä vaarattomalta näyttävä merkkijono on saatettu muodostaa käyttäen lähes samalta näyttäviä merkkejä, joilla kuitenkin on eri merkitys (vrt nokia.com vs. nokía.com). Vastaavaa voi saada aikaan kirjoitussuunnalla kikkailemalla.

Eräitä Unicode-merkkejä[muokkaa]

  • Lainausmerkit (yksin ja kaksin): ’ ’’ ” ””
  • Kolme pistettä: … (U+2026 HORIZONTAL ELLIPSIS)
  • Luetelmapallo: • (U+2022 BULLET)

Viivamerkit[muokkaa]

  • n‐viiva: – (U+2013 EN DASH)

Käyttö: Varsinaisena ajatusviivana. Ellipsiviiva (poisjätön merkki): 50,– euroa, –kele! Alkamisen ja loppumisen ääripäät: sivut 10–12, Helsingin–Hämeenlinnan rautatie. Lainatun tekstin erottamiseen. Luetteloviiva. Repliikkiviiva. Osapuolten erottamiseen: Paasikiven–Kekkosen linja.

  • Yhdysmerkki: ‐ (U+2010 HYPHEN)

Käyttö: yhdysnimissä ja kun sanan toinen puolisko on erisnimi tai lyhenne: Maija‐Liisa Virtanen‐Mäkinen, SM‐kilpailu, Tampere‐talo. Tavuviivana. ”luuta‐akka”, ”pakastekaapit ja ‐arkut”, ”sydän‐ ja verisuonitaudit”

Matematiikkaa[muokkaa]

  • Peruslaskutoimitukset: + − × : ∕ (U+2215 DIVISION SLASH)
  • Murtolukuja: ⅓ ⅔ ¼ ½ ¾ ⅕ ⅖ ⅗ ⅘ ⅙ ⅚ ⅛ ⅜ ⅝ ⅞
  • ⁄ (U+2044 FRACTION SLASH)
  • Yhtäläisyys ja epäyhtäläisyys: ≈ = ≠ < ≤ > ≥
  • Yläindeksinumerot ja ‐merkit: ⁰ ¹ ² ³ ⁴ ⁵ ⁶ ⁷ ⁸ ⁹ ⁺ ⁻ ⁼ ⁽ ⁾ ⁿ ⁱ
  • Alaindeksinumerot ja ‐merkit: ₀ ₁ ₂ ₃ ₄ ₅ ₆ ₇ ₈ ₉ ₊ ₋ ₌ ₍ ₎
  • Muut
    • ∶ (U+2236 RATIO)
    • ⇒ ∞ ‰ ± °

Kieliä[muokkaa]

  • Englanti:
    • — (U+2014 EM DASH)
    • “ (U+201C LEFT DOUBLE QUOTATION MARK)
    • ‘ (U+2018 LEFT SINGLE QUOTATION MARK)
  • Espanja: Ñ ñ ¿ ¡
  • Esperanto: Ĉ ĉ Ĝ ĝ Ĥ ĥ Ĵ ĵ Ŝ ŝ Ŭ ŭ
  • Norja ja tanska: Æ æ Ø ø
  • Ranska: È É Ê Ë è é ê ë Ò Ó Ô ò ó ô Ç ç Ï ï
  • Saksa: ẞ ß Ü ü
  • Viro: Õ õ

Sekalaisia[muokkaa]

  • © ® ℗ ™ ℠ § ¶ µ € → ♀ ♂
  • Teinixmäisyyksiä: ☺ ☹ ♥ ‽ ☠ ☢ ☣ ☮ ♫

Aiheesta muualla[muokkaa]