Mikä on merkistökoodaus
Koodaus on sopimus: «luku 65 tarkoittaa kirjainta A». Kun kirjoitat tekstin, ohjelma tallentaa nämä luvut; kun toinen henkilö avaa sen, hänen ohjelmansa muuntaa ne takaisin kirjaimiksi samalla sopimuksella. Jos kumpikaan ei käytä samaa taulukkoa, teksti menee pieleen.
On erotettava kaksi asiaa. Toinen on merkistö, luettelo siitä, mitkä luvut vastaavat mitäkin symbolia. Toinen on se, miten nuo luvut tallennetaan tavuiksi. ASCIIssa nämä kaksi osuvat yksinkertaisesti yhteen; Unicodessa eivät, ja siinä kohtaa UTF-8 astuu kuvaan.
ASCII: 128 merkkiä 7 bitillä
ASCII (lyhenne sanoista American Standard Code for Information Interchange) standardoitiin 1960-luvulla. Se käyttää 7 bittiä eli 2 potenssiin 7 = 128 koodia, luvuista 0–127. Niistä 33 on ohjausmerkkejä (0–31 ja 127) ja 95 tulostettavia (32–126, välilyönti mukaan lukien).
Siinä ei ole ääkkösiä, ei euromerkkiä: se suunniteltiin englannille. Se selittää, miksi myöhemmin tarvittiin muita taulukoita.
| Ohjausmerkki | Desimaali | Heksadesimaali | Binääri (7 bittiä) | Mihin käytetään |
|---|---|---|---|---|
| Tyhjä (NUL) | 0 | 00 | 0000000 | Merkitsee merkkijonon lopun useissa kielissä |
| Vaakasarkain (TAB) | 9 | 09 | 0001001 | Hyppää seuraavaan tabulaattoripaikkaan |
| Rivinvaihto (LF) | 10 | 0A | 0001010 | Siirtyy seuraavalle riville |
| Rivinpalautus (CR) | 13 | 0D | 0001101 | Palaa rivin alkuun |
| Escape (ESC) | 27 | 1B | 0011011 | Aloittaa ohjausjaksot |
| Välilyönti | 32 | 20 | 0100000 | Ensimmäinen tulostettava merkki |
| Poisto (DEL) | 127 | 7F | 1111111 | Poistaa merkin |
Suhteet, jotka kannattaa muistaa
Taulukko ei ole järjestetty umpimähkään. Muutaman säännönmukaisuuden avulla osaat lukea koodeja ulkomuistista.
- Numerot «0»–«9» ovat välillä 48–57 (30–39 heksadesimaalina). Numeron arvo on sen koodi miinus 48: «7» on 55, ja 55 − 48 = 7.
- Isot kirjaimet ovat välillä 65 («A») – 90 («Z») ja pienet välillä 97 («a») – 122 («z»).
- Ison kirjaimen ja sen pienen vastineen ero on aina 32: «A» = 65 ja «a» = 97; «C» = 67 ja «c» = 99. Binäärissä muuttuu vain yksi bitti: 01000001 «A»:lle ja 01100001 «a»:lle.
- Saadaksesi selville, monesko aakkosten kirjain iso kirjain on, vähennä 64: «C» on 67 ja 67 − 64 = 3, kolmas kirjain.
- Koska kaikilla isoilla kirjaimilla (65–90) on pienempi koodi kuin pienillä (97–122), «koodin mukainen» aakkosjärjestys asettaa «Zebran» ennen «applea». Monet ohjelmat tarvitsevat erillisen vertailuasetuksen järjestääkseen oikein.
Rivinvaihto: LF, CR ja CRLF
Rivinvaihto vaikuttaa yksinkertaiselta, mutta se kirjoitetaan eri tavoin järjestelmästä riippuen. Unix, Linux ja macOS käyttävät yhtä merkkiä, LF (10). Windows käyttää kahta peräkkäin, CR ja LF (13 ja 10), joita kutsutaan CRLF:ksi. Vanhat kaukokirjoittimet tarvitsivat kaksi eri käskyä: palauttaa vaunu alkuun ja siirtää paperia rivin verran.
Tämä ero aiheuttaa tiedostoja, jotka näkyvät yhtenä rivinä yksinkertaisessa editorissa tai joiden jokaisen rivin lopussa on outo merkki. Jos haluat tietää kummankin koodin, kirjoita LF tai CR ASCII-taulukon hakuun.
«Laajennettu ASCII» ei ole standardi
Koska tavussa on 8 bittiä ja ASCII käyttää vain 7, vapaita koodeja jäi 128 (128–255), ja jokainen valmistaja ja alue täytti ne omalla tavallaan. Tätä kutsutaan «laajennetuksi ASCIIksi», mutta yhtä taulukkoa ei ole: niitä on monta, ja niitä kutsutaan koodisivuiksi. Kaksi tunnetuinta ovat Latin-1 (ISO-8859-1), jossa é on koodi 233 ja ä koodi 228, sekä Windows-1252, joka on samankaltainen mutta eroaa koodeissa 128–159 (siellä on esimerkiksi euromerkki).
Ongelma on, että koodi 228 tarkoittaa «ä» yhdessä taulukossa ja jotain muuta toisessa. Yhdellä taulukolla kirjoitettu ja toisella luettu teksti näytti roskaa. Unicode syntyi lopettamaan tämän sekaannuksen.
Unicode ja UTF-8
Unicode antaa yksilöllisen luvun, jota kutsutaan koodipisteeksi, jokaiselle lähes kaikkien maailman kirjoitusjärjestelmien merkille sekä symboleille ja emojeille. Nykyään siinä on yli 150 000 merkkiä. Se kirjoitetaan etuliitteellä U+ ja heksadesimaalina: «A» on U+0041, «ä» on U+00E4, euro on U+20AC ja hymynaama-emoji on U+1F600. Ensimmäiset 128 koodipistettä ovat täsmälleen samat kuin ASCIIssa.
UTF-8 on yleisin tapa tallentaa nuo luvut tavuiksi, ja se käyttää 1–4 tavua merkistä riippuen. ASCIIn 128 merkkiä vievät yhden tavun, joka on sama kuin ennenkin, joten ASCII-teksti on myös kelvollista UTF-8-tekstiä. Loput vievät enemmän tavuja.
| Merkki | Koodipiste | Tavuja UTF-8:ssa | Tavut (heksadesimaali) |
|---|---|---|---|
| A | U+0041 | 1 | 41 |
| é | U+00E9 | 2 | C3 A9 |
| ä | U+00E4 | 2 | C3 A4 |
| € | U+20AC | 3 | E2 82 AC |
| 😀 | U+1F600 | 4 | F0 9F 98 80 |
Miksi «ä»:n tilalla näkyy «Ã¤»
Se on yleisin virhe, ja sille on tarkka selitys. «ä» on UTF-8:ssa kaksi tavua: C3 ja A4. Jos ohjelma luulee tekstin olevan Latin-1:tä, se lukee jokaisen tavun omana merkkinään: C3 on «Ã» ja A4 on «¤». Tulos: «Ã¤». Sama tapahtuu «ö»:lle, joka näkyy muodossa «Ã¶», ja sanalle «pöytä», joka näkyy muodossa «pöytä».
Ratkaisu on lähes aina kertoa ohjelmalle, että tiedosto avataan UTF-8:na (tekstieditorissa tai taulukkolaskennan tuonnin asetuksissa). Kun käy toisin päin, eli Latin-1-teksti luetaan UTF-8:na, näkyy usein kysymysmerkillisiä salmiakkikuvioita, koska nuo yksittäiset tavut eivät muodosta kelvollisia UTF-8-jaksoja.
Näin käytät ASCII-taulukkoa ja muunninta
Työkalu «ASCII-taulukko» näyttää 128 merkkiä koodeineen desimaalina, heksadesimaalina, oktaalina ja binäärinä sekä ohjausmerkkien nimet.
- Kirjoita hakuun merkki, koodi tai ohjausmerkin nimi (esimerkiksi A, 65, 41 tai LF) löytääksesi sen rivin.
- Käytä suodatinpainikkeita (Ohjausmerkit, Numerot, Isot kirjaimet, Pienet kirjaimet, Merkit) nähdäksesi vain yhden ryhmän.
- Muuntaaksesi kirjoita teksti kenttään «Teksti» ja valitse muoto (desimaali, heksadesimaali, oktaali tai binääri): alla näkyvät koodit. «Hei» antaa desimaalina 72 101 105 ja heksadesimaalina 48 65 69.
- Voit myös toisin päin: liitä koodit välilyönnein tai pilkuin erotettuina kenttään «Koodit», niin teksti muodostuu. Heksadesimaalissa hyväksytään etuliitteet kuten 0x41.
Jos tekstissä on merkkejä, jotka eivät ole ASCII-merkkejä, kuten ä, työkalu huomauttaa siitä ja näyttää niiden Unicode-koodin. Nähdäksesi todelliset tavut UTF-8:ssa käytä Teksti binaariksi -työkalua: ä antaa 11000011 10100100, kaksi 8 bitin tavua. Rajoitukset: taulukko näyttää vain tavallisen ASCIIn, ei laajennettua, ja kaikki lasketaan selaimessasi lähettämättä tekstiä millekään palvelimelle.
Usein kysytyt kysymykset
Montako merkkiä ASCIIssa on?
128, koodit 0–127, kukin 7 bitillä. Niistä 33 on ohjausmerkkejä ja 95 tulostettavia, välilyönti mukaan lukien.
Mikä on kirjaimen A ja a ASCII-koodi?
«A» on 65 (41 heksadesimaalina, 01000001 binäärinä) ja «a» on 97 (61 heksadesimaalina, 01100001 binäärinä). Ne eroavat aina 32:lla.
Mikä ero on ASCIIlla ja Unicodella?
ASCIIssa on 128 englannille suunniteltua merkkiä. Unicodessa on yli 150 000 merkkiä lähes kaikista kielistä ja emojeja, ja sen ensimmäiset 128 ovat samat kuin ASCIIssa.
Mikä UTF-8 on?
Se on yleisin tapa tallentaa Unicode-teksti tavuiksi. Se käyttää 1–4 tavua merkkiä kohden: ASCII-merkit vievät yhden, ä kaksi ja emoji neljä.
Miksi tekstini näyttää «Ã¤» tai «Ã¶»?
Koska UTF-8:lla tallennettua tekstiä luetaan Latin-1:nä. Avaa tiedosto valiten koodaukseksi UTF-8, niin se korjaantuu.