Az ASCII-táblázat: hogyan lett 128 számból a szöveg alapja
Az ASCII, azaz az American Standard Code for Information Interchange rövidítése, az a kódolás, amely megtanította a számítógépeket megegyezni abban, mi is egy betű. 1963-ban jelent meg, és a hatvanas években csiszolódott tovább, és az angol szöveg minden alapvető karakterét, a számjegyeket, valamint néhány vezérlőjelet olyan számokra képez le, amelyeket egy gép tárolni és továbbítani tud. Amikor lenyomjuk a nagy A billentyűt, a számítógép nem egy formát tárol, hanem a 65-ös számot. Az ASCII az a keresőtáblázat, amely miatt ez a szám mindenhol A-t jelent, ahová csak eljut.
A szabvány híresen kompakt. Az ASCII 7 bites kód, ami azt jelenti, hogy minden karakter hét bináris számjegybe fér el, és a teljes készlet pontosan 2 a 7. hatványon, azaz 128 különálló, 0-tól 127-ig számozott kódpontból áll. Ez a takarékosság szándékos volt. A korai távgépírók és modemek lassúak és drágák voltak, ezért minden bit számított. Hét bit elég volt a nagy- és kisbetűs latin betűk, a tíz számjegy, a gyakori írásjelek és az eszközöket szinkronban tartó jelzőkarakterek lefedésére, egy fennmaradó bittel, amelyet sok rendszer hibaellenőrzésre használt.

Két fél: vezérlőkarakterek és nyomtatható karakterek
A táblázat két részre oszlik tisztán. A 0-tól 31-ig terjedő kódok, valamint a 127-es kód (DEL) a vezérlőkarakterek. Ezek nem nyomtatnak jelet a képernyőre. Ehelyett arra utasítanak egy eszközt, hogy tegyen valamit: a 9-es kód egy vízszintes tabulátor, a 10-es kód a soremelés, amely új sorba lép, a 13-as a kocsi vissza (carriage return), a 7-es kód pedig a csengő, amely régen hallható hangot adott a terminálon. Összesen harminchárom ilyen jelzőkód létezik, és bár közülük sok mára történelmi érdekesség, a soremelés, a kocsi vissza és a tabulátor ma is nélkülözhetetlen a szövegfájlok formázásához.
A 32-től 126-ig terjedő kódok a nyomtatható karakterek, összesen kilencvenöt darab. A 32-es kód a szóköz, amely azért számít nyomtathatónak, mert előrébb mozgatja a kurzort, még ha semmit nem is jelenít meg. Innentől jönnek az írásjelek és szimbólumok, a 48-tól 57-ig terjedő kódokon a 0-tól 9-ig számjegyek, a 65-től 90-ig a nagybetűk A-tól Z-ig, a 97-től 122-ig pedig a kisbetűk a-tól z-ig. Ebből az elrendezésből egy szép tulajdonság adódik: ugyanannak a betűnek a kis- és nagybetűs változata pontosan 32-vel tér el egymástól, ezért egyetlen bit átbillentése átváltja a betűméretet. Ezek a szabályszerűségek nem véletlenek, hanem szándékosan úgy tervezték őket, hogy a rendezés és a kis-nagybetű váltás egyszerű aritmetikával elvégezhető legyen.
Decimális, hexadecimális és bináris: egy szám három nézete
Minden ASCII-kód egyszerűen egy szám, és háromféleképpen írjuk fel. A decimális a mindennapi, tízes számrendszerű forma, tehát az A egyenlő 65-tel. A hexadecimális, azaz tizenhatos számrendszer az a forma, amelyhez a programozók gyakran nyúlnak, mert jól illeszkedik a bájtokhoz: az A itt 0x41, a nyomtatható tartomány pedig 0x20-tól 0x7E-ig terjed. A bináris, azaz kettes számrendszer az, amit a hardver ténylegesen tárol, tehát az A hét bitjén 1000001. Ugyanaz a karakter, három jelölésmód, és az, hogy magabiztosan váltunk közöttük, alapvető készség, amikor memóriakivonatokat vagy hálózati forgalmat olvasunk. Ha gyakran dolgozik ezekkel az átváltásokkal, a speedor.net bővebb referencia-táblázatai egy kattintásra tartják a leképezéseket.

Hol számít még mindig az ASCII
Tévedés lenne az ASCII-t a történelemhez sorolni. Ott van minden nap munkájában bárkinél, aki kódot ír. A programozási nyelvek a szövegliterálokat, a forrásfájlokat és a protokoll-kulcsszavakat bájtszinten ASCII-ként kezelik. A hálózati protokollok, mint a HTTP-fejlécek, az SMTP és sok konfigurációs formátum ASCII-ben vannak definiálva, hogy ember számára olvashatók maradjanak. Amikor egy karakterlánc sérültnek tűnik, a fejlesztők egy hexanézetet nyitnak meg, és a nyers bájtokat az ASCII-táblázathoz igazítva keresik a bekóborlott vezérlőkaraktert vagy a hibás sorvéget. Az URL-kódolás, a Base64 és az escape-szekvenciák mind ASCII-értékekre épülnek. Aki kódolási hibákat vadászik, annak egy gyors referencia a fejlesztői eszközök mellett egy rejtélyes bájtból nyilvánvaló választ csinál.
Az ASCII-tól a Unicode-ig és az UTF-8-ig
Az ASCII kiválóan kezelte az angolt, és szinte semmi mást. A 128 karakteres plafon nem fér el ékezetes betűkkel, cirill, kínai, arab írással vagy emojikkal. A Unicode erre válaszul minden karakterhez egyedi számot, úgynevezett kódpontot rendelt minden létező írásrendszerben, mára jóval több mint százezret. Lényeges, hogy a Unicode karakterek katalógusa, nem tárolási formátum, ezért szüksége van egy kódolásra, amely a kódpontokat bájtokká alakítja.
Az UTF-8 ez a kódolás, és ez az oka annak, hogy az ASCII sosem tűnt el igazán. Az UTF-8 karakterenként egy-négy bájtot használ, és úgy tervezték, hogy a 0-tól 127-ig terjedő kódpontok, vagyis a teljes ASCII-tartomány, egyetlen bájton tárolódjanak, pontosan úgy, mint a sima ASCII-ban. Ez teszi az UTF-8-at tökéletesen visszafelé kompatibilissé: minden érvényes ASCII-fájl egyben érvényes UTF-8-fájl is. A 127 fölötti karakterek további bájtokat használnak. Ez az elegáns kompatibilitás az egyik fő oka annak, hogy az UTF-8 ma a web túlnyomó többségét hajtja. Röviden: az ASCII az eredeti 128 karakteres mag, a Unicode az univerzális katalógus, amely magában foglalja, az UTF-8 pedig a kódolás, amely mindkettőt hordozza, miközben az ASCII-szöveget bájtról bájtra változatlanul hagyja.
Gyakran ismételt kérdések
Hány karakter van az ASCII-táblázatban?
A szabványos ASCII 128 karaktert definiál, 0-tól 127-ig számozva. Ebből 95 a nyomtatható karakter, beleértve a szóközt is, 33 pedig vezérlőkarakter, amely eszközöknek jelez, ahelyett hogy jelet nyomtatna.
Mi a különbség a vezérlő- és a nyomtatható karakterek között?
A vezérlőkarakterek, a 0-tól 31-ig terjedő kódok plusz a 127-es, arra utasítanak egy eszközt, hogy tegyen valamit, például soremelést vagy tabulátort, és nem hoznak létre látható jelet. A nyomtatható karakterek, a 32-től 126-ig terjedő kódok, azok a betűk, számjegyek, írásjelek és a szóköz, amelyeket ténylegesen látunk a képernyőn.
Miért 7 bites kód az ASCII?
Hét bit pontosan 128 kombinációt ad, ami elég volt az angol betűk, számjegyek, írásjelek és vezérlőjelek lefedésére, miközben sávszélességet takarított meg a lassú korai hardveren. A bájt nyolcadik bitjét gyakran paritásos hibaellenőrzésre tartották fenn.
Mi az A betű ASCII-kódja?
A nagybetűs A decimálisan 65, hexadecimálisan 0x41, binárisan 1000001. A kisbetűs a decimálisan 97, ami pontosan 32-vel több, egy beépített mintázat, amely lehetővé teszi, hogy a kis-nagybetű váltás egyszerű aritmetikával történjen.
Az ASCII ugyanaz, mint a Unicode?
Nem. Az ASCII 128 karaktert fed le, míg a Unicode több mint százezret katalogizál minden írásrendszerben. Az ASCII valójában a Unicode első 128 kódpontja, tehát a nagyobb szabvány kis részhalmaza.
Hogyan kapcsolódik az UTF-8 az ASCII-hoz?
Az UTF-8 a Unicode egyik kódolása, amely a 0-tól 127-ig terjedő kódpontokat egyetlen bájton tárolja, pontosan úgy, mint az ASCII. Emiatt minden ASCII-fájl érvényes UTF-8-fájl is, ezért visszafelé kompatibilis az UTF-8, és uralja a mai webet.
