ASCII eli American Standard Code for Information Interchange on standardi, jonka mukaan tietyt tietokoneen muistiin tallennetut luvut muunnetaan näytöllä näkyviksi merkeiksi.
Tietokoneen tallennustilassa saattaisi olla tallennettuna yksittäinen tavu eli kahdeksan bitin mittainen pätkä binääristä informaatiota: 01000001. Tietokone tallentaa tämän laitteesta riippuen sähkö- tai magneettisina varauksina. Jos asiaa ajattelee kytkiminä tai lamppuina, ensimmäinen on POIS, seuraava PÄÄLLÄ, seuraavat 5 POIS ja viimeinen PÄÄLLÄ. Mutta miten tietokoneen näytölle saadaan tästä kirjain?
Yksi tapa muuntaa luvut kirjaimiksi olisi A=1, B=2, C=3, D=4. Mutta entä pienet kirjaimet ja erikoismerkit, numerot? ASCII-merkistö on eräs tapa määritellä merkkien ja lukujen välinen suhde. Tämä merkistö määrittää, miten luvut 0-127 tulkitaan kirjaimiksi ja muiksi merkeiksi. Aiemmin nähty 01000001 on kymmenjärjestelmässä luku 65, joka puolestaan edustaa kirjainta A.
Ensimmäiset merkit alussa ovat ohjausmerkkejä. Vanhanaikaiset tietokoneet toimivat siten, että päätteeseen liitetyltä näppäimistöltä tietokoneeseen ja tietokoneelta päätteelle lähetettiin pelkästään yksittäisen tavun kokoisia merkkejä. Mutta miten sitten lähetettäisiin muuta tietoa? Tässä kuvaan astuvat ohjausmerkit. Esimerkiksi merkki 7 eli BEL tarkoittaa kirjaimellisesti kelloa, eli Bell. Kun tämä merkki saapuu päätteelle, päätteen kaiuttimesta (tai kirjaimellisesta soittokellosta) kuuluu "ping"-ääni. Vastaavasti merkki 10 eli LF tarkoittaa "Line Feed". Tällöin kursori näytöllä siirtyy yhden merkin alaspäin. Ennen perinteisiä päätelaitteita käytössä ole nimenomaan kaukokirjoitin, eli kirjoituskoneen näköinen laite. Vanhassa kaukokirjoittimessa _line feed_ kirjaimellisesti syöttää paperia yhden rivin ylöspäin. Merkki 13 eli "Carriage Return" palauttaa kursorin, tai paperitelan rivin alkuun. Merkistö on siis suunniteltu siihen aikaan, kun tietokonetta ohjattiin vielä kirjoituskoneella, mutta se toimii edelleen samalla tavalla moderneissa laitteissa. Merkistö on myös suunniteltu ennen kuin 8-bittiset laitteet vakiintuivat. Tästä syystä bittejä on vain 7.
Järjestys näyttää periaatteessa aika mielivaltaiselta, vaikkakin ainakin kirjaimet ja numerot ovat keskenään järkevässä järjestyksessä. Merkkien järjestyksellä on kuitenkin paljonkin logiikkaa taustalla. Ohjausmerkit ovat 32 ensimmäistä. Binäärilukuina nämä ovat 0000000 - 00011111. Jos siis ensimmäiset kolme merkkiä ovat nollia, tietokone voi todeta tämän ohjausmerkiksi. Numerot 0-9 ovat kätevästi aseteltuna sellaiseen kohtaan, että numeron varsinainen numeerinen arvo voidaan poimia helposti. Binäärilukuina numerot ovat siis:
Jolloin numeron varsinainen numeroarvo löytyy ottamalla tästä pelkkä oikeanpuoleinen nibble.
Isojen ja pienten kirjainten kohdalla on myös selkeä logiikka. Niiden väliin on työnnetty muutamia erikoismerkkejä, jotta isot ja pienet kirjaimet on saatu kohdistettua sopivasti. Kun tarkastellaan lukuja, isojen ja pienten kirjainten ero on aina 32. Tällöin siis pieni kirjain voidaan muuttaa isoksi vähentämällä siitä 32 ja sama toimii tietenkin toiseenkin suuntaan. Tietokoneelle tämä on itseasiassa vielä helpompaa. Koska 32 on 2:n potenssi, se vastaa yhtä yksittäistä bittiä.
Kirjainkoon vaihtaminen onnistuu siis yksittäistä bittiä muuttamalla. Ja jos oikein väkisin halutaan, niin tässähän tavallaan A=1, B=2. Toki niissä on kaikissa +64 tai +96 sen lisäksi, mutta tämäkään valinta ei liene sattumaa.
ASCII on ensimmäisten laadittujen merkistöjen joukossa. Tuohon aikaan koko tieteenala oli vielä pitkälti englanninkielistä ja tällä merkistöllä pääsee kieltämättä hyvinkin pitkälle. Melko nopeasti tuli kuitenkin ongelmia: tästä puuttuu myös monet eri rahayksiköt, kuten £ ja €, puhumattakaan kaikista tarkkeista, eli âáõ. Ja sitten on vielä erilaisia aakkostoja joista löytyy muitakin merkkejä, kuten µəß. Selvästikään tämä merkistö ei enää nykypäivänä kelpaa sellaisenaan. Tämäkin materiaali käyttää selkeästi jotain eri merkistöä, kun siinä näkyy nämä erikoismerkit.
ASCII-merkistössä on vain 128 merkkiä, mutta yksittäiseen tavuun mahtuisi 256 merkkiä. Laajennettu ASCII ei ole mikään yksittäinen vakiintunut merkistö. Kaikenlaisia kotikutoisia laajennoksia syntyi, kunnes lopulta syntyi standardi ISO 8859. Tämä on kuudentoista eri merkistön kokoelma. Täällä päin maailmaa näistä tunnetuin on ISO 8859-1, joka tunnetaan myös nimellä Latin-1. Tämä laajentaa merkistöä Länsi-Eurooppalaisille sopivalla tavalla. Joitakin merkkejä silti puuttuu (wikipedia), mutta laajennetussa merkistössä on selvästi paljon hyödyllisiä merkkejä. Myös yksi kreikkalainen kirjain µ on päässyt mukaan, jotta esimerkiksi mikrometri (µm) voidaan kirjoittaa oikealla tavalla.
Vaan entäpä sitten ne kaikki muut merkit? Emojit, kyrilliset kirjaimet, kreikkalaiset, aasian kaikki eri kielet? Kenties Unicodesta ja UTF-8 enkoodauksesta tulee myöhemmin materiaalia tännekin.
Sillä välin voit testailla muunnostyökaluani.