Fő tartalom
A számítógép és az Internet
Tantárgy/kurzus: A számítógép és az Internet > 1. témakör
5. lecke: Szöveg tárolása binárisanSzö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áris | Szimbó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:
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.
A HPE kódolás csak 2 bites, így ez korlátozza, hogy hány szimbólumot tud ábrázolni.
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:
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:
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áris | Karakter |
---|---|
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 text | A |
start text, 10, end text, start text, 0, end text, start text, 0, end text, start text, 0, end text, start text, 10, end text | B |
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 | C |
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 | D |
start text, 10, end text, start text, 0, end text, start text, 0, end text, start text, 101, end text | E |
start text, 10, end text, start text, 0, end text, start text, 0, end text, start text, 110, end text | F |
start text, 10, end text, start text, 0, end text, start text, 0, end text, start text, 111, end text | G |
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 | H |
Az ASCII-szabvány alapján egy négybetűs üzenetet binárisba tudunk kódolni:
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áma | 1. bájt | 2. bájt | 3. bájt | 4. bájt |
---|---|---|---|---|
1 | 0xxxxxxx | |||
2 | 110xxxxx | 10xxxxxx | ||
3 | 1110xxxx | 10xxxxxx | 10xxxxxx | |
4 | 11110xxx | 10xxxxxx | 10xxxxxx | 10xxxxxx |
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.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.