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
start text, 0, end text, start text, 1, end text☮️
start text, 10, end text❤️
start text, 11, end text😀
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 start text, 10, end text-t. Amikor a programnak az start text, 10, end text-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:
start text, 0, end text, start text, 10111111010, end text
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, slash, 5
  • egyszerűsített áltört, például 7, slash, 4
  • vegyes szám, például 1, space, 3, slash, 4
  • véges tizedes tört, például 0, comma, 75
  • A pí többszöröse, például 12, space, start text, p, i, end text vagy 2, slash, 3, space, start text, p, i, end text

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. start superscript, 1, end superscript
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”, start text, 0, end text, start text, 0, end text, start text, 0, end text, start text, 0, end text, start text, 0, end text, start text, 0, end text, start text, 0, end text-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: start text, 0, end text, start text, 0, end text, start text, 0, end text, start text, 0, end text, start text, 111, end text) csengést vagy egyéb hangjelzést okozott. Az „ENQ” (kódolva start text, 0, end text, start text, 0, end text, start text, 0, end text, start text, 0, end text, start text, 101, end text) 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” (start text, 0, end text, start text, 0, end text, start text, 0, end text, start text, 1101, end text) 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” (start text, 0, end text, start text, 0, end text, start text, 0, end text, start text, 1010, end text) „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
start text, 10, end text, start text, 0, end text, start text, 0, end text, start text, 0, end text, start text, 0, end text, start text, 1, end textA
start text, 10, end text, start text, 0, end text, start text, 0, end text, start text, 0, end text, start text, 10, end textB
start text, 10, end text, start text, 0, end text, start text, 0, end text, start text, 0, end text, start text, 11, end textC
start text, 10, end text, start text, 0, end text, start text, 0, end text, start text, 10, end text, start text, 0, end textD
start text, 10, end text, start text, 0, end text, start text, 0, end text, start text, 101, end textE
start text, 10, end text, start text, 0, end text, start text, 0, end text, start text, 110, end textF
start text, 10, end text, start text, 0, end text, start text, 0, end text, start text, 111, end textG
start text, 10, end text, start text, 0, end text, start text, 10, end text, start text, 0, end text, start text, 0, end textH
Az ASCII-szabvány alapján egy négybetűs üzenetet binárisba tudunk kódolni:
start text, 10, end text, start text, 0, end text, start text, 0, end text, start text, 0, end text, start text, 11, end text, start text, 10, end text, start text, 0, end text, start text, 10, end text, start text, 0, end text, start text, 0, end text, start text, 10, end text, start text, 0, end text, start text, 0, end text, start text, 101, end text, start text, 10, end text, start text, 0, end text, start text, 0, end text, start text, 110, end text
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.squared
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.cubed
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” = „🎉”).start superscript, 4, end superscript
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.start superscript, 5, end superscript
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?
start text, 0, end text, start text, 10, end text, start text, 0, end text, start text, 10, end text, start text, 0, end text, start text, 1, end text, start text, 11110, end text, start text, 0, end text, start text, 0, end text, start text, 0, end text, start text, 10, end text, start text, 0, end text, start text, 11111, end text, start text, 10, end text, start text, 0, end text, start text, 10, end text, start text, 0, end text, start text, 10, end text, start text, 10, end text, start text, 0, end text, start text, 110, end text, start text, 0, end text, start text, 1, end text, start text, 1110, end text, start text, 0, end text, start text, 0, end text, start text, 10, end text, start text, 10, end text, start text, 0, end text, start text, 10, end text, start text, 0, end text, start text, 11, end text, start text, 10, end text, start text, 0, end text, start text, 0, end text, start text, 1010, end text
  • A helyes megoldás:
  • egész szám, például 6
  • egyszerűsített valódi tört, például 3, slash, 5
  • egyszerűsített áltört, például 7, slash, 4
  • vegyes szám, például 1, space, 3, slash, 4
  • véges tizedes tört, például 0, comma, 75
  • A pí többszöröse, például 12, space, start text, p, i, end text vagy 2, slash, 3, space, start text, p, i, end text

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. start superscript, 6, end superscript
🔎 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.