ASCII-taulukko

LukuHeksaMerkki
00[NUL]
11[SOH]
22[STX]
33[ETX]
44[EOT]
55[ENQ]
66[ACK]
77[BEL]
88[BS]
99[HT]
10A[LF]
11B[VT]
12C[FF]
13D[CR]
14E[SO]
15F[SI]
1610[DLE]
1711[DC1]
1812[DC2]
1913[DC3]
2014[DC4]
2115[NAK]
2216[SYN]
2317[ETB]
2418[CAN]
2519[EM]
261A[SUB]
271B[ESC]
281C[FS]
291D[GS]
301E[RS]
311F[US]
LukuHeksaMerkki
3220
3321!
3422"
3523#
3624$
3725%
3826&
3927'
4028(
4129)
422A*
432B+
442C,
452D-
462E.
472F/
48300
49311
50322
51333
52344
53355
54366
55377
56388
57399
583A:
593B;
603C<
613D=
623E>
633F?
LukuHeksaMerkki
6440@
6541A
6642B
6743C
6844D
6945E
7046F
7147G
7248H
7349I
744AJ
754BK
764CL
774DM
784EN
794FO
8050P
8151Q
8252R
8353S
8454T
8555U
8656V
8757W
8858X
8959Y
905AZ
915B[
925C\
935D]
945E^
955F_
LukuHeksaMerkki
9660`
9761a
9862b
9963c
10064d
10165e
10266f
10367g
10468h
10569i
1066Aj
1076Bk
1086Cl
1096Dm
1106En
1116Fo
11270p
11371q
11472r
11573s
11674t
11775u
11876v
11977w
12078x
12179y
1227Az
1237B{
1247C|
1257D}
1267E~
1277F[DEL]

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.

Oudot merkit alussa

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.

Vanha kaukokirjoitin

ASCII-merkkien järjestys

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.

Missä ö ja ä?

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.

Laajennettu ASCII

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.