Az UTF-8 megegyezik az ASCII-val?
Nem. AZ ASCII és az Unicode egy-egy karakterkódolási SZABVÁNY, míg az UTF-8 és UTF-16 a Unicode szabvány MEGVALÓSÍTÁSOK. Egy ilyen szabvány azt írja le, hogy milyen kódhoz milyen karakter tartozzon.
Az ASCII gyakorlatilag a latin ábécé kis-és nagybetűinek, a számoknak, valamint néhány általános nyelvtani és matematikai jelnek a kódját szabja meg. Ez ugye 7 bit, de megvalósítási szinten 8 bites karaktereket használnak, így a "felső" 128 karakter a konkrét megvalósítástól függ.
Ugyanúgy ASCII megvalósítás az ISO-8859-1 (latin1) és ISO-8859-2 (latin2), de például a magyar "Ő","ű" betűket eltérően kezelik. Az "A", "5", "-", "!" karakterek viszont egységesek.
ASCII:
Latin2:
Az Unicode szabvány ezzel szemben minden karakter kódját rögzíti, az latinon kívül az összes cirill, arab, kínai, japán stb... karaktert, sőt már az összes létező emoji kódját is. Ez egyébként visszafelé kompatibilis az ASCII-val, tehát az angol betűk és számok ugyanolyan kódon helyezkednek el.
Az UTF-8 és UTF-16 mindkettő Unicode megvalósítás, tehát az "Árvíztűrő tükörfúrógép" UTF-8 és UTF-16 kódolással is ugyanaz. De például a 😀⚱🏴🎉 megjelenítése már eltérhet UTF-8 és UTF-16 között, mivel az UTF-8 legfeljebb 2^16 különböző jelet képes megkülönböztetni, az UTF-16 2^32-ig van felkészítve.
Unicode:
Az ASCII szabvány igazából csak 127 karakter helyét rögzíti, ettől nem térnek el az ASCII megvalósítások. Azért is szokás például programkódoknál vagy akár fájl- és könyvtárneveknél ékezet nélkül írni, csak angol karakterekkel. Viszont igény volt az egyes nemzeti írásjelekre, ezért alakultak ki a különböző kódlapok. Ezekben a közös, hogy 1 karakter = 1 byte, tehát egyszerűen megvalósítható.
Az Unicode szabvány pedig mindent létező karaktert magában foglal. Egy fix méretű karakteres megvalósítás viszont elég sok helyet foglalna: 4 byte kell 1 karakterhez. Pedig nagyon gyakran használtak az angol betűk, számok, ahol ez pazarlás. Az UTF-32 egyébként pont ezt csinálja, de emiatt kevéssé használatos.
Az UTF-8 viszont nagyon elterjedt. Ez egy változó karakterhosszúságú kódolás. Az alap karaktereket 1 byteon, a kiterjesztéseket több byteon tárolja. Például a 22 karakterből álló "Árvíztűrő tükörfúrógép" UTF-8 szövegnek valójában 31 byte kell. Ha ezt átalakítom mondjuk Notepad++ segítségével (Windows-1252) ANSI kódolásra, akkor látszik is, hogy hosszabb lesz:
"ĂrvĂztűrĹ‘ tĂĽkörfĂşrĂłgĂ©p"
(Ilyesmi van a hátterében annak, hogy ékezetek nélkül hosszabb SMS-t lehetett írni, vagy SIM-kártyára ékezet nélkül kifért valakinek a neve a telefonkönyvben, ékezettel pedig nem...)
Szóval az egyes megvalósítások nem feltétlen térnek el a szabványtól, csak különbözőképp valósítják meg azt, amire nem tér ki a szabvány - például hogy mi kerüljön az ASCII felső értékeire, vagy milyen módszerrel tárolják el az Unicode karaktereket.
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!