If you're seeing this message, it means we're having trouble loading external resources on our website.

Ha webszűrőt használsz, győződj meg róla, hogy a *.kastatic.org és a *.kasandbox.org nincsenek blokkolva.

Fő tartalom

Szöveg tárolása binárisan

A számítógépek nem csak számokat tárolnak binárisan. De hogyan tudnak a bináris számok nem-számokat, például betűket és szimbólumokat ábrázolni?
Ehhez mindössze egy kis emberi együttműködésre van szükség. Meg kell állapodnunk a kódolásokban, vagyis a karakterek és a bináris számok közötti leképezésekben.

Egyszerű kódolás

Mi lenne, ha például az alábbi szimbólumokat szeretnénk binárisan tárolni?
☮️❤️😀
Nézzünk egy egyszerű kódolást:
BinárisSzimbólum
01☮️
10❤️
11😀
Nevezzük ezt HPE-kódolásnak (a Heart – szív, Peace – béke, E – emoji szimbólumok alapján). Segít a programozóknak, ha a kódolásoknak nevet adunk, hogy tudják, ha ugyanazt a kódolást használják.
Ha egy számítógépes programnak a ❤️ jelet kell tárolnia a számítógép memóriájában, akkor tárolhatja helyette az 10-t. Amikor a programnak az 10-t kell megjelenítenie a felhasználónak, emlékszik a HPE-kódolásra, és helyette a ❤️ jelet jeleníti meg.
A számítógépes programoknak és fájloknak gyakran több karaktert kell tárolniuk. Ezt az egyes karakterek kódolásának összefűzésével tudják megtenni.
Egy program írhatna például egy „msg.hpe” nevű fájlt ezekkel az adatokkal:
010111111010
Egy másik számítógépen lévő program, amely érti a HPE kódolást, ezután meg tudja nyitni az „msg.hpe” állományt, és meg tudja jeleníteni a szimbólumok sorozatát.
Mérd fel tudásodat!
Milyen sorozatot jelenítene meg a program?
Válassz egyet:

A HPE kódolás csak 2 bites, így ez korlátozza, hogy hány szimbólumot tud ábrázolni.
Mérd fel tudásodat!
Hány szimbólumot ábrázolhat a 2-bites kódolás?
  • A helyes megoldás:
  • egész szám, például 6
  • egyszerűsített valódi tört, például 3/5
  • egyszerűsített áltört, például 7/4
  • vegyes szám, például 1 3/4
  • véges tizedes tört, például 0,75
  • A pí többszöröse, például 12 pi vagy 2/3 pi

Több bitnyi információ használatával viszont elegendő betűt képes ábrázolni ahhoz, hogy a számítógép üzeneteket, dokumentumokat és weboldalakat tudjon tárolni.

ASCII kódolás

Az ASCII volt az egyik legelső szabványosított kódolás. Az 1960-as években találták fel, amikor a távolsági kommunikáció elsődleges formája a távírás volt, azonban még a mai modern számítástechnikai rendszerekben is használják. 1
A távírógép használói üzeneteket gépeltek a képen láthatóhoz hasonló távírógépeken:
Távírógép fényképe, amely mechanikus billentyűzetből, papírra gépelt betűkből és egy beviteli papírcsíkokat olvasó mechanizmusból áll.
ASR 33-as távírógép. A kép forrása: Marcin Wichary.
A távíró ezután az ASCII szabvány alapján binárisan kódolta az egyes beírt karaktereket, majd a bináris adatokat vagy tárolta, vagy továbbította.
Az alábbi képen egy 1972-es nyomtató kézikönyvének egyik oldala látható, rajta 128 ASCII kóddal:
Az ASCII kódolás szkennelt táblázata.
ASCII táblázat TermiNet 300 nyomtatóhoz. A kép forrása: Wikipedia.
Minden ASCII karaktert binárisan kódoltak, 7 bitet használva. A fenti táblázatban az oszlop címe az első 3 bitet, a sor címe pedig az utolsó 4 bitet jelöli. A legelső karakter a „NUL”, 0000000-ként kódolva.
Az első 32 kód „vezérlőkarakterekből” áll, tehát olyan karakterekből, amelyek a betű nyomtatásán kívül más hatást is kifejtenek. A „BEL” (binárisan kódolva: 0000111) csengést vagy egyéb hangjelzést okozott. Az „ENQ” (kódolva 0000101) egy megkeresést jelöl, mely a fogadó állomást arra kéri, hogy azonosítsa magát.
A vezérlőkaraktereket eredetileg távírókhoz és távírógépekhez tervezték, de közülük sokat újrahasznosítottak a modern számítógépek és az internet számára, főleg a „CR”-t és az „LF”-et. A „CR” (0001101) a távírógépeken a „kocsi-visszatérést” (carriage return) jelentette, ez a nyomtatófejet a sor elejére vitte. Az „LF” (0001010) „sortovábbítást” (line feed) jelentett, ez a nyomtatófejet egy sorral lejjebb vitte. A modern internetes protokollok, például a HTTP, az FTP és az SMTP egy „CR” + „LF” kombinációt alkalmazva jelölik a sorok végét.
A fennmaradó 96 ASCII karakter már sokkal ismerősebb.
Íme az első 8 nagybetű:
BinárisKarakter
1000001A
1000010B
1000011C
1000100D
1000101E
1000110F
1000111G
1001000H
Az ASCII-szabvány alapján egy négybetűs üzenetet binárisba tudunk kódolni:
1000011100100010001011000110
Mérd fel tudásodat!
Milyen szót takar ez az ASCII-kódolt bináris adat?
Válassz egyet:

Az ASCII kódolással azonban számos probléma van.
Az első nagy probléma az, hogy az ASCII csak az angol ábécé betűit, valamint korlátozott számú jelet tartalmaz.
Az olyan nyelvek amelyek 128-nál kevesebb karaktert használnak, megalkothatnák a saját ASCII verziójukat csak a saját nyelvükön írt szövegek kódolására. De mi a helyzet egy olyan szövegfájllal, amelyben több nyelv karakterei fordulnak elő? Az ASCII nem lenne képes egy olyan karakterláncot kódolni, mint például a „Helló José, kérsz Glühweint? Az ára 10 €”.
És mi a helyzet az olyan nyelvekkel, amelyekben több ezer logogram van? Az ASCII nem lenne képes elég logogramot kódolni egy olyan kínai mondathoz, mint például a „你好,想要一盘饺子吗?十块钱。”.
A másik probléma az ASCII-kódolással az, hogy 7 bitet használ minden egyes karakter ábrázolására, míg a számítógépek általában bájtokban – 8 bitből álló egységekben – tárolják az információt. A programozók márpedig nem szeretik pazarolni a memóriát.
Amikor a legelső számítógépek elkezdték használni az ASCII-t a karakterek kódolására, különböző számítógépek különböző módokat találtak ki arra, hogy mire használják fel az utolsó bitet. Például a HP számítógépek a nyolcadik bitet európai országokban használt karakterek (pl. „£” és „Ü”) ábrázolására használták, a TRS-80 számítógépek színes grafikákhoz, az Atari számítógépek pedig az első 128 karakter invertált, fehér-fekete változataihoz.2
Az eredmény? Könnyen előfordulhatott, hogy az egyik alkalmazásban létrehozott „ASCII” fájl egy másik „ASCII”-kompatibilis alkalmazásban megnyitva teljesen értelmetlennek tűnt.
Új kódolásra volt szükség, méghozzá egy olyan 8-bites bájton alapuló kódolásra, amely a világ összes nyelvére alkalmazható.

Az Unicode

Először is hány karakterre van egyáltalán szükség a világ összes nyelvének ábrázolásához? Melyek azok a karakterek, melyek alapvetően minden nyelven azonosak, még ha különböző is a hangzásuk?
1987-ben számítógépes mérnökök egy csoportja megpróbált választ adni ezekre a kérdésekre. Végül létrehozták az Unicode-ot, egy univerzális karakterkészletet, amely minden karakterhez egy „kódpontot” (hexadecimális számot) és egy nevet rendel.3
Az „ą” karaktert például az „U+0105”-höz rendelték, és „latin kisbetűs A jobb farokkal” néven jelölik. Az „ą”-hoz hasonló karakter 13 nyelvben fordul elő, például a lengyelben és a litvánban. Így az Unicode szerint a lengyel „robią” szóban lévő „ą” és a litván „aslą” szóban lévő „ą” ugyanaz a karakter. Az Unicode azáltal, hogy a nyelvek közötti karaktereket egységesíti, helyet takarít meg.
De még így is jó sok karaktert kellett kódolni. Az Unicode karakterkészlet 1991-ben 7129 nevesített karakterrel indult, és 2019-re 137 929 nevesített karakterre nőtt. Ezeknek a karaktereknek a többsége kínai, japán és koreai logogramokat ír le, mint például az „U+6728”, amely a „木” jelre utal. Több mint 1200 emoji szimbólum is szerepel benne („U+1F389” = „🎉”).4
Az Unicode karakterkészlet, nem kódolás. Szerencsére mérnökök egy másik csoportja talált megoldást a Unicode hatékony bináris kódolására.

UTF-8

1992-ben informatikusok feltalálták az UTF-8 kódolást, amely kompatibilis az ASCII kódolással, de megoldja annak problémáit is.5
Az UTF-8 az Unicode-szabvány minden karakterét 1, 2, 3 vagy 4 bájt segítségével írja le.
Amikor egy számítógépes program UTF-8 szövegfájlt olvas, a bájt elején található 1-es bitek száma alapján tudja, hogy hány bájt jelenti a következő karaktert.
Bájtok száma1. bájt2. bájt3. bájt4. bájt
10xxxxxxx
2110xxxxx10xxxxxx
31110xxxx10xxxxxx10xxxxxx
411110xxx10xxxxxx10xxxxxx10xxxxxx
Ha az előtagban nincsenek 1 bitek – ha az első bit 0–, akkor ez azt jelenti, hogy a karaktert egyetlen bájt jelöli. A bájt fennmaradó 7 bitjét az eredeti 128 ASCII karakter ábrázolására használják. Ez azt jelenti, hogy egy 8-bites ASCII karakterekből álló sorozat is érvényes UTF-8 sorozat.
Az 110-val kezdődő két bájtot a latin betűs nyelvek (pl. spanyol, német) és más nyelvek, például a görög, héber és arab karakterek kódolására használják. Az 1110-val kezdődő három bájt az ázsiai nyelvek (pl. kínai, japán, koreai) legtöbb karakterét kódolja. Az 11110-val kezdődő négy bájt minden mást kódol, a ritkán használt történelmi írásjelektől az egyre gyakrabban használt emoji szimbólumokig.
Mérd fel tudásodat!
Az UTF-8 szabvány szerint hány karaktert ábrázol ez a 8 bájt?
0100100111110000100111111001001010011001111000101001001110001010
  • A helyes megoldás:
  • egész szám, például 6
  • egyszerűsített valódi tört, például 3/5
  • egyszerűsített áltört, például 7/4
  • vegyes szám, például 1 3/4
  • véges tizedes tört, például 0,75
  • A pí többszöröse, például 12 pi vagy 2/3 pi

A legtöbb modern programozási nyelvben van beépített UTF-8 támogatás, így a legtöbb programozónak soha nem kell tudnia, hogy pontosan hogyan kell a karaktereket binárisra konvertálni.
✏️ Próbáld ki alább, hogyan működik a JavaScript a karakterláncok UTF-8-as kódolásához! Játssz több nyelvvel és jellel!
Az UTF-8 kódolási szabvány jelenleg a HTML-fájlok legelterjedtebb kódolása a weben: 2019 decemberében a weboldalak 94,5%-át tette ki. 6
🔎 Ha most jobb egérgombbal rákattintasz erre a weboldalra, és kiválasztod az „Oldal forrásának megtekintése” („View page source”) menüpontot, rákereshetsz az „utf-8” karakterláncra, és láthatod, hogy ez a weboldal is UTF-8 kódolású.
Általában az a jó kódolás, amely a lehető legkevesebb bittel képes a maximális információmennyiséget megjeleníteni. Az UTF-8 remek példa erre, mivel az angol betűket mindössze 1 bájttal tudja kódolni, de elég rugalmas ahhoz, hogy további bájtokkal betűk ezreit kódolja.
Az UTF-8 azonban csak egy a lehetséges kódolások közül. Az UTF-16 és UTF-32 olyan alternatív kódolások, amelyek szintén képesek az összes Unicode karaktert megjeleníteni. Vannak nyelvspecifikus kódolások is, mint például a japán Shift-JIS. A számítógépes programoknak lehetőségük van az igényeiknek és korlátaiknak leginkább megfelelő kódolást használni.

🙋🏽🙋🏻‍♀️🙋🏿‍♂️Kérdésed van a témával kapcsolatban? Szívesen válaszolunk, csak kérdezz alább, a „Kérdések” részben!

Szeretnél részt venni a beszélgetésben?

Még nincs hozzászólás.
Tudsz angolul? Kattints ide, ha meg szeretnéd nézni, milyen beszélgetések folynak a Khan Academy angol nyelvű oldalán.