A szövegkódolás megtudhatja, hogyan d; Unicode - Buzut
Most, hogy ismerjük az Unicode és annak történetének szükségességét, vessünk egy pillantást a technikai részletekre. Azt mondtuk, hogy a konzorcium több kódolást egységesít, tehát mik ezek és hogyan működnek ?
Mivel ezek a kódolások nagyon népszerűek, a nevük ismerős számodra, főleg, hogy az előző fejezetekben már említettük őket. Ezek UTF-n kódolások. A kódolások közötti különbség a karakter ábrázolásához szükséges bájtok minimális hossza.
Azt mondtuk, hogy eredetileg az Unicode volt minden két bájtban. Mivel a legtöbb latin nyelv nagyon kevés nem ASCII jelet használ, ez sokak számára elfogadhatatlan helypazarlás.
Másrészt az olyan jeleket használó nyelvek esetében, amelyek nem részei az ASCII-nek, ezek a kódolások nagyon hasznosak. Tehát mindenkinek megfelelő megoldást kellett találnunk. Tehát az Unicode-ban a kódpontok és a kódolás két nagyon különböző dolog.
Az Unicode tábla
Az Unicode mindenekelőtt egy óriási tábla, amely egyedi karaktereket rendel minden karakterhez, annak kódpontjához vagy kódpont. Az Unicode táblázat lehetővé teszi 1 114 110 (2 16 x 17) kódpont hozzárendelését. Ezeknek a kódpontoknak csupán 25% -át adják ma.
Ez a táblázat 17 síkra (0-tól 16-ig) oszlik, egyenként két bájtból, vagy síkonként 65 536 kódpontból (65 536 x 17 = 1 114 112). Ezek a tervek lehetővé teszik a karaktercsoportok egyszerű kijelölését. Az előtér, hívott Alapvető többnyelvű repülőgép (BMP) vagy Alapvető Többnyelvű Terv csoportosítja a 65 ezer leggyakoribb karaktert. Az 1–16. Terveket további terveknek nevezzük.
Emellett az "Unicode kódolásról" beszélni valójában nincs értelme. Például az Unicode-ban a „hello” fordítás:
Ezek azok az Unicode kódpontok, amelyek megfelelnek a szó különböző betűinek. Amint láthatja, a kódpontok hexadecimálisan vannak kifejezve. Jóllehet általában így fejezik ki őket, tizedes megfelelőjükön keresztül is ábrázolhatók.
A HTML is lehetővé teszi mindkét jelölést.
Ezt tesztelheti a HTML kódolóval. A különféle jelek és a hozzájuk tartozó kódpontok mind fel vannak sorolva az Unicode táblázat webhelyén.
Ezek a kódpontok, függetlenül attól, hogy hexa, decimális vagy bináris formában vannak-e kifejezve, nem elegendőek egy jel kódolásához bináris reprezentációjában.
Kódolások
Addig csak egy módon lehet egy jelet és annak számát egyeztetni az Unicode táblában. Nem árulja el, hogyan tároljuk ezeket az elemeket a memóriában. Itt jönnek a kódolások.

Fix méretű kódolások
Ezeknek a kódolásoknak az az előnye, hogy egyszerű az elemzés és a keresés, valamint a csonkolás, mert bármi is legyen a karakter, annak mérete előre ismert. A bináris és a kódpont közötti leképezés egyszerű. Ez azonban a felhasznált hely (RAM, lemez, sávszélesség stb.) Rovására történik.
Az Unicode első napjaiban, amint láttuk, mindent két bájtban tároltunk. Ez a kódolás, bár elavult, mégis létezik, UCS-2-nek hívják, és rögzített hosszúságú. Nem teszi lehetővé az összes Unicode karakter képviseletét, csak az első 65k, amelyek a leggyakoribbak (emojik azonban nincsenek).
A "hello" tehát a következőképpen tárolható a memóriában (ábrázolás hexa formában).
De mint említettük, egy gépen kis endian, a bájtok megfordulnak.
A példa a hely felesleges használatát szemlélteti, mivel minden két bájtban van tárolva, ha csak ASCII karaktereket használunk - sőt néhány latin betűnél, például ékezetes betűknél, egy bájt pazarolódik el karakterenként.
Most, ha az "€" jel ábrázolását nézzük, a két bájt helyesen van használva.
Másrészt az összes karakter, amely kívül esik a BMP-n, vagyis a 65536 leggyakoribb karakter, nem ábrázolható az UCS-2-ben. Ezért ez a kódolás manapság nem része az Unicode szabványnak.
UTF-32
Ez a kódolás az Unicode szabvány leghosszabb rögzített méretű kódolása, és az is az egyetlen rögzített méretű, amely nem amortizált. Az összes Unicode-karakter 32 bites vagy négy bájtos ábrázolására szolgál. Vesszük az előző példánkat, és az UTF-32BE-be kódoljuk.
Itt az elveszett hely csak elgondolkodtató. Még az emojik sem foglalnak annyi helyet, íme egy pizza 🍕 az UTF-32BE-ben.
Ennek a kódolásnak az az előnye, hogy az összes karakter azonos méretű legyen. Erre a célra szinte soha nem használják szöveg tárolására, inkább belső API-kban szolgál. Például a Python 3 a szöveges változók ábrázolására használja.
Változtatható méretű kódolások
Manapság, két változó méretű kódolás szerepel az Unicode szabványban, UTF-8 és UTF-16. Maximálisuk négy bájt, de a jel legkisebb mérete egy, illetve két bájt.
Vitathatatlanul ez a legelterjedtebb kódolás manapság. Információk tárolására és továbbítására egyaránt. Minimális mérete nyolc bit, egyes jelek esetén akár négy bájt is lehet.
Az UTF-8 megkülönbözteti azt is, hogy teljesen kompatibilis az ASCII-vel. Bármely érvényes ASCII karakter érvényes UTF-8 karakter. Továbbá, mivel egybájtos szavakból áll, nem endian-érzékeny.
Mivel ez egy változó méretű kódolás, egyes jelek több szóból állnak. Annak érdekében, hogy azonosítani lehessen a karaktert alkotó szavak számát, az UTF-8 ezt az információt az első bájtba helyezi.
- minden olyan kódpont, amelynek értéke kevesebb, mint 128, egy bájtra van kódolva, a legjelentősebb bit nulla (mint az ASCII esetében),
- a többi kódpont több bájt fölé van kódolva. Az első bájt legjelentősebb bitje 1, annyi 1-el, ahány szó van. Tehát van minimum kettő és legfeljebb négy 1, majd 0 következik, míg a fennmaradó biteket az információk kódolására használjuk. A következő szavaknak 10-vel kell kezdődniük .
| 1 | 0xxxxxxx |
| 2 | 110xxxxx 10xxxxxx |
| 3 | 1110xxxx 10xxxxxx 10xxxxxx |
| 4 | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx |
Lássuk ezt néhány konkrét példával. Az „e” betű az ASCII-hez hasonlóan van kódolva. Vagy 65hex, vagy 101dec, ez 01100101bin értéket ad. Eddig nagyon egyszerű.
Vegyük például az emoji 😎 példát. Ha megnézzük az Unicode táblázatot, rájövünk, hogy a kódja U + 1F60E vagy 128526dec. Ha azonban a kódolási részleteket nézzük, akkor a hexa és a tizedes ábrázolás sem felel meg.
Értékünk visszaszerzéséhez meg kell értenünk a fent ismertetett kódolást. Lássuk ezt részletesen.
UTF-16
Az UTF-16 hossza változó, 16 bites szavakkal. Így az UTF-16-ban a jel két vagy négy bájtos. Az UTF-8-tól eltérően az UTF-16 nem kompatibilis az ASCII-vel - és természetesen az UTF-8-tal sem.