Maa-asetukset

Linuxissa ohjelmille pitää kertoa, että haluat käsitellä tekstiä, joka on UTF-8-muodossa (eikä esimerkiksi pelkkää vanhanaikaista ASCII-tekstiä).

Nykyään kaiken pitäisi olla automaattisesti jo kunnossa. Erityisesti Aallon Linux-koneilla tästä ei pitäisi joutua käyttäjien huolehtimaan, vaan järkevät maa-asetukset on jo valmiina.

Voit testata esimerkiksi tällä komennolla, että omalla koneellasi ei ole ongelmia erikoismerkkien käsittelyssä:

echo 'lapio kätkö šakki αβγδε' | egrep -o '\w+'

Tulosteena pitäisi olla:

lapio
kätkö
šakki
αβγδε

Jos taas tuloste näyttää tältä, koneesi ei ilmeisesti ymmärrä muuta kuin vanhanaikaisia ASCII-merkkejä, joista löytyy kirjaimet a-z:

lapio
k
tk
akki

Helpoin korjaus on siirtyä käyttämään Aallon Linux-koneita, joissa kaikki asetukset on valmiiksi oikein (varmistathan sielläkin!), mutta jos haluat omalla koneellasi kaiken kuntoon, jatka lukemista!

Linuxissa (ja myös esim. macOS:ssä) maa-asetuksia voi tutkia komennolla locale. Tuloste on yleensä jotain tämän näköistä:

LANG=en_US.UTF-8
LANGUAGE=en_US:en
LC_CTYPE=en_US.UTF-8
LC_NUMERIC="en_US.UTF-8"
LC_TIME=en_DK.UTF-8
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER=fi_FI.UTF-8
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

Erilaisia maa-asetuksia on paljon (esim. miten ilmaistaan ajat ja valuutat), mutta meitä yleensä kiinnostaa lähinnä asetus LC_CTYPE, joka kertoo kaikkein tärkeimmän: miten yleensäkään pötkö tavuja tulkitaan tekstiksi.

Jos locale-komennon tulosteessa rivillä LC_CTYPE lukee jotain, missä mainitaan UTF-8, (kuten edellä), kaikki on yleensä kunnossa. Jos taas näin ei ole, ongelma on suurella todennäköisyydellä juuri tässä.

Voit säätää maa-asetuksia asettamalla ympäristömuuttujia. Esimerkiksi asetukseen LC_CTYPE voi vaikuttaa näin:

  • Jos ympäristömuuttuja LC_ALL on asetettu, noudatetaan sitä.

  • Muuten, jos ympäristömuuttuja LC_CTYPE on asetettu, noudatetaan sitä.

  • Muuten, jos ympäristömuuttuja LANG on asetettu, noudatetaan sitä.

Voit siis asettaa ympäristömuuttujalla LANG järkevät oletusarvot ja halutessasi säätää niitä tapauskohtaisesti.

Yleensä asetus en_US.UTF-8 on nykyään turvallinen valinta. Tämä tarkoittaa siis englannin kieli, Yhdysvaltojen maa-asetukset ja Unicode-tekstiä UTF-8-koodauksella. Tämä maa-asetus on yleensä kaikissa koneissa tuettuna, ja ohjelmat eivät myöskään ala yhtäkkiä puhua suomea, mutta ohjelmat ymmärtävät, miten tekstiä tulee tulkita.

Voit muuttaa maa-asetuksia tilapäisesti yhtä istuntoa varten asettamalla ympäristömuuttujia export-komennolla, tähän tapaan:

export LANG=en_US.UTF-8

Muutoksen pitäisi suoraan näkyä tämän jälkeen locale-komennon tulosteessa. Jos jostain syystä väärä LC_CTYPE-valinta ei kuitenkaan korjaannu, vika voi olla siinä, että sinulla on asetettuna joko LC_CTYPE tai LC_ALL väärään arvoon. Voit korjata näitä tähän tapaan:

export LC_CTYPE=en_US.UTF-8
export LC_ALL=en_US.UTF-8

Varmista, että locale-komento näyttää kohdassa LC_CTYPE oikean arvon. Kokeile uudestaan tämän luvun alussa olevaa grep-komentoa, ja varmista, että se nyt toimii oikein.

Komennolla export tehdyt muutokset vaikuttavat vain yhteen shell-istuntoon. Kun suljet terminaalin, tämä muutos unohtuu. Jos haluat tehdä muutoksen pysyvästi, joudut editoimaan tiedostoa, jonka käyttämäsi shell lukee käynnistyessään. Yleensä oikea tiedosto on kotihakemistossasi oleva tiedosto .profile, jota voit editoida esimerkiksi näin:

nano ~/.profile

Luo tiedosto, jos se puuttuu, tai lisää tiedoston loppuun uusia rivejä, jos tiedosto on jo olemassa ennestään (voi olla samalla hyvä hetki vilkaista, mitä siellä oikeastaan onkaan ja miksi). Kun lisäät oikean export-komennon tähän tiedostoon, sen pitäisi tulla voimaan automaattisesti joka kerta, kun avaat terminaalin tai kirjaudut koneelle. Kokeile ja varmista!

Palautusta lähetetään...