ASCII és Unicode: mi ez, és mire jó

A számítógép csak számokat ért, ezért minden betű, amit a képernyőn látsz, egy kód. Az ASCII volt az első szabvánnyá vált kódtáblázat, a Unicode pedig az, amelyet ma bármilyen nyelven íráshoz használunk. Itt megtudhatod, hogyan működnek, milyen kódokat érdemes ismerni, miért jelennek meg néha furcsa jelek az ékezetes betűk helyett, és hogyan nézhetsz meg mindent a táblázatban.

Frissítve:

Mi az a karakterkódolás

A kódolás egy megállapodás: «a 65-ös szám az A betűt jelenti». Amikor szöveget írsz, a program ezeket a számokat tárolja; amikor valaki más megnyitja, az ő programja ugyanezzel a megállapodással fordítja vissza betűkre. Ha a kettő nem ugyanazt a táblázatot használja, a szöveg hibásan jelenik meg.

Két dolgot érdemes szétválasztani. Az egyik a karakterkészlet, vagyis hogy mely számok mely jeleknek felelnek meg. A másik az, hogyan tárolódnak ezek a számok bájtokban. Az ASCII-nál a kettő triviálisan egybeesik; a Unicode-nál nem, és itt jön be az UTF-8.

ASCII: 128 karakter, 7 biten

Az ASCII (az American Standard Code for Information Interchange rövidítése) az 1960-as években vált szabvánnyá. 7 bitet használ, vagyis 2 a 7-ediken = 128 kódot, 0-tól 127-ig. Ebből 33 vezérlőkarakter (0-tól 31-ig és a 127) és 95 nyomtatható (32-től 126-ig, a szóközzel együtt).

Nem tartalmaz ékezetes betűket, sem ő-t, sem ű-t, sem az euró jelét: angolra tervezték. Ez magyarázza, miért kellett később más táblázatokat készíteni.

A leggyakrabban előforduló kódok. A szóköz (32) nyomtathatónak számít, bár nem látszik.
VezérlőkarakterDecimálisHexadecimálisBináris (7 bit)Mire való
Null (NUL)0000000000Több nyelvben a karakterlánc végét jelöli
Vízszintes tabulátor (TAB)9090001001A következő tabulátorhelyre ugrik
Soremelés (LF)100A0001010A következő sorra lép
Kocsivissza (CR)130D0001101Visszatér a sor elejére
Escape (ESC)271B0011011Vezérlősorozatokat indít
Szóköz32200100000Az első nyomtatható karakter
Törlés (DEL)1277F1111111Törli a karaktert

Összefüggések, amelyeket érdemes megjegyezni

A táblázat nem véletlenszerűen van rendezve. Néhány szabályszerűséggel fejből is olvashatsz kódokat.

Sorvég: LF, CR és CRLF

A sortörés egyszerűnek tűnik, de rendszertől függően másként írják. A Unix, a Linux és a macOS egyetlen karaktert használ, az LF-et (10). A Windows két egymás utánit, a CR-t és az LF-et (13 és 10), amelyeket CRLF-nek hívnak. A régi telexgépeknek két külön parancs kellett: a kocsit visszavinni a sor elejére, és a papírt egy sorral előretolni.

Ez a különbség az oka annak, hogy egyes fájlok egy alap szerkesztőben egyetlen sorban látszanak, vagy minden sor végén furcsa jel van. Ha tudni szeretnéd, melyiknek mi a kódja, írd be az LF-et vagy a CR-t az ASCII táblázat keresőjébe.

A «kiterjesztett ASCII» nem szabvány

Mivel egy bájt 8 bit, az ASCII pedig csak 7-et használ, 128 szabad kód maradt (128-tól 255-ig), és minden gyártó és régió a maga módján töltötte fel őket. Ezt hívják «kiterjesztett ASCII»-nak, de nincs egyetlen táblázat: sok van, ezeket kódlapoknak nevezik. Két ismert közülük a Latin-1 (ISO-8859-1), ahol az é a 233-as kód, és a Windows-1252, amely hasonló, de eltér a 128–159 kódoknál (itt van például az euró). A magyar szövegekhez a Latin-2 (ISO-8859-2) kellett, mert a Latin-1-ben nincs ő és ű: ott a 245-ös kód az õ (nem ő), a 251-es pedig az û.

A gond az, hogy a 233-as kód az egyik táblázatban «é», a másikban valami más. Az egyik táblázattal írt és a másikkal olvasott szöveg zagyvaságot mutatott. A Unicode azért született, hogy véget vessen ennek a zűrzavarnak.

Unicode és UTF-8

A Unicode a világ szinte minden írásrendszerének minden karakteréhez, valamint a szimbólumokhoz és az emodzsikhoz egyedi számot rendel, amelyet kódpontnak hívnak. Ma több mint 150 000 karaktere van. U+ előtaggal és hexadecimálisan írják: az «A» U+0041, az «á» U+00E1, az «ő» U+0151, az euró U+20AC, a mosolygó arc emodzsi pedig U+1F600. Az első 128 kódpont pontosan az ASCII-é.

Az UTF-8 ezeknek a számoknak a legelterjedtebb bájtokban tárolási módja, és karaktertől függően 1–4 bájtot használ. Az ASCII 128 karaktere egyetlen, a régivel azonos bájtot foglal el, így egy ASCII-szöveg egyben érvényes UTF-8 szöveg is. A többi több bájtot foglal.

Minél messzebb az ASCII-tól, annál több bájtot foglal a karakter.
KarakterKódpontBájtok UTF-8-banBájtok (hexadecimális)
AU+0041141
éU+00E92C3 A9
őU+01512C5 91
€U+20AC3E2 82 AC
😀U+1F6004F0 9F 98 80

Miért jelenik meg «Ã¡» az «á» helyett

Ez a leggyakoribb hiba, és pontos magyarázata van. Az á UTF-8-ban két bájt: C3 és A1. Ha egy program azt hiszi, hogy a szöveg Latin-1 kódolású, minden bájtot külön karakterként olvas: a C3 «Ã», az A1 pedig «¡». Az eredmény: «Ã¡». Ugyanez történik az «é»-vel, amely «Ã©»-nek látszik, és a «köszönöm»-mel, amely «köszönöm»-ként jelenik meg.

A megoldás szinte mindig az, hogy megmondod a programnak, nyissa meg a fájlt UTF-8-ként (egy szövegszerkesztőben vagy egy táblázatkezelő importálási beállításában). Amikor fordítva történik, vagyis Latin-1 szöveget olvasnak UTF-8-ként, gyakran kérdőjeles rombuszok jelennek meg, mert ezek az egyedi bájtok nem alkotnak érvényes UTF-8 sorozatokat.

Hogyan használd az ASCII táblázatot és az átalakítót

Az «ASCII táblázat» eszköz mind a 128 karaktert megmutatja decimális, hexadecimális, oktális és bináris kódjával, a vezérlőkarakterek nevével együtt.

  1. Írj a keresőbe egy karaktert, egy kódot vagy egy vezérlőkarakter nevét (például A, 65, 41 vagy LF), hogy megtaláld a sorát.
  2. A szűrőgombokkal (Vezérlő, Számjegyek, Nagybetűk, Kisbetűk, Jelek) csak egy csoportot láthatsz.
  3. Átalakításhoz írj egy szöveget a «Szöveg» mezőbe, és válaszd ki a formátumot (decimális, hexadecimális, oktális vagy bináris): lent megjelennek a kódok. A «Szia» decimálisan 83 122 105 97, hexadecimálisan pedig 53 7A 69 61.
  4. Fordítva is megteheted: illessz be szóközzel vagy vesszővel elválasztott kódokat a «Kódok» mezőbe, és összeáll a szöveg. Hexadecimálisan elfogadott az előtag is, például 0x41.

Ha a szövegben nem ASCII karakterek vannak, például az á, az eszköz jelzi, és megmutatja a Unicode-kódját. A valódi UTF-8 bájtok megtekintéséhez használd a «Szöveg binárisra» eszközt: az á 11000011 10100001, két 8 bites bájt. A korlátok: a táblázat csak a szabványos ASCII-t mutatja, nem a kiterjesztettet, és minden a böngésződben számolódik, a szöveget nem küldjük el semmilyen szervernek.

Gyakori kérdések

Hány karaktere van az ASCII-nak?

128, 0-tól 127-ig terjedő kódokkal, egyenként 7 biten. Ebből 33 vezérlő és 95 nyomtatható, a szóközt is beleértve.

Mi az A és az a betű ASCII-kódja?

Az «A» 65 (hexadecimálisan 41, binárisan 01000001), az «a» pedig 97 (hexadecimálisan 61, binárisan 01100001). Mindig 32-vel különböznek.

Mi a különbség az ASCII és a Unicode között?

Az ASCII-nak 128 karaktere van, angolra tervezve. A Unicode-nak több mint 150 000, szinte minden nyelvből és emodzsikból, és az első 128 megegyezik az ASCII-éval.

Mi az az UTF-8?

A Unicode-szöveg bájtokban tárolásának legelterjedtebb módja. Karakterenként 1–4 bájtot használ: az ASCII-karakterek egyet, egy á kettőt, egy emodzsi négyet foglal.

Miért látszik a szövegem «Ã¡»-nak vagy «Ã©»-nak?

Mert az UTF-8-ban mentett szöveget Latin-1-ként olvassák. Nyisd meg a fájlt az UTF-8 kódolás megadásával, és megoldódik.