UTF-8

Az UTF-8 (8-bit Unicode Transformation Format, 8 bites Unicode átalakítási formátum) változó hosszúságú Unicode karakterkódolási eljárás, melyet Rob Pike és Ken Thompson alkotott meg. Bármilyen Unicode karaktert képes reprezentálni, ugyanakkor visszafelé kompatibilis a 7 bites ASCII szabvánnyal. Emiatt egyre inkább az internetes karakterkódolás standardjává válik.

Az angolszász, majd az európai országokból kiindulva az ASCII után először az úgynevezett Latin-1 kódolás terjedt el, ami tartalmazza az összes angol nyelvhez szükséges betűt, illetve számos európai nyelv betűit, de például a magyar „ő” és „ű” betűket nem (ezek helyett – helytelenül – gyakran használják a hullámos illetve a kalapos betűket: û ô vagy õ). Magyarhoz lehet azonban a Latin-2 (közép-európai) kódolást is használni, ami ismeri az ő és ű betűinket, de nem ismer más fontos betűket, például a cirill, görög, vagy például az örmény, indiai, arab és héber betűket, a kínai írásjegyeket és a japán kanákat. A Unicode és az UTF-8 kódolás egyszerre támogatja mindezen karakterek megjelenítését, és így minden nyelv egységes kódolást tud használni, megelőzve a betűk nem tervezett „átalakulását”.

Az UTF-8-kódolás lényege, hogy a 7 bites ASCII kódtábla karaktereit (angol kis- és nagybetűk, számok és gyakoribb írásjelek) az ASCII-kódjukkal jelöli, az egyéb karakterek kódját pedig „feldarabolja”, és a darabokat egy vezérlőjelet követő több, egymás utáni bájtban helyezi el úgy, hogy a bájtok mindegyike 127 felett van (azaz így nem téveszthető össze a 7 bites ASCII-kódok egyikével sem). Ennek számos előnye van: a 7 bites ASCII-szöveg UTF-8-kódja saját maga, illetve az UTF-8 szöveget tévesen valamilyen más elterjedt kódolásnak (például ISO-8859-1-nek) értelmezve általában nem kapunk nagyon rossz eredményt (magyar szöveg esetén csak az ékezetes karakterek, a gondolatjel és egyéb speciális tipográfiai jelek helyén lesz két-két értelmetlen karakter), a félbeszakadt UTF-8 karakterről egyértelműen felismerhető, hogy hibás, és a nagyrészt ASCII-szöveg kódolása nem igényel sok extra bájtot.

Működése 
Az UTF-8 kód bináris alakban 0-val kezdődő bájtjai 7 bites ASCII karaktereket jelölnek, a 11-gyel kezdődőek több bájtos karakterkód-szekvencia kezdetét, az 10-val kezdődőek pedig a folytatását. A karakterkód-szekvenciát indító bájt elején álló egyesek száma megadja, hány bájtból áll a szekvencia, ezután egy 0 jön, a fennmaradó helyen és a követő bájtok fennmaradó 6 helyén lévő biteket összefűzve kapjuk a jelölt karakter Unicode azonosító számát. Más szóval, ha a Unicode azonosítót 4 bájton ábrázoljuk (balra növekvő helyiértékekkel), akkor az UTF-8 kódolását az alábbi táblázat első olyan sora fogja megadni, amelynek a bal oldalán lévő minta ráillik a négybájtos számra.

Összesen 221 =  szám ábrázolható így, ami lefedi a Unicode szabványban definiált teljes spektrumot (U+0000-től U+10FFFF-ig, összesen  karakter). Bár az UTF-8 kódolás logikája kiterjeszthető lenne 6 vagy akár 7 bájtos szekvenciákra is, és az UTF-8-at definiáló korábbi ISO/IEC 10646 szabvány még maximum 6 bájtos szekvenciákat írt elő, a jelenleg érvényes Unicode szabvány szerint csak a legfeljebb 4 bájtos szekvencia számít helyes UTF-8 kódolásnak. Ennek oka a csak  karaktert ábrázolni képes UTF-16 szabvánnyal való kompatibilitás.

BOM 
Egyes windowsos programok a fájl elejére írt 0xEF,0xBB,0xBF bájtsorozattal jelzik, hogy UTF-8 kódolású fájlról van szó; ezt néha UTF-8 BOM kódolásnak hívják. Ez a bájtsorozat ugyanis az U+FEFF Unicode-azonosítójú bájtsorrend-jel (angolul byte order mark, röviden BOM) UTF-8 kódja; a BOM karakter normális esetben UTF-16 kódolás elején állva azt jelzi, hogy a kétbájtos számok kisebb vagy nagyobb helyiértékű bájtja van-e elöl. (UTF-16-ban ugyanis az U+FEFF karakter kódja 0xFE,0xFF, a két bájt felcserélésével kapott 0xFF,0xFE pedig nem érvényes UTF-16 kód.) UTF-8-ban ennek a karakternek elméletileg nincs jelentése, így használható a kódolás jelzésére, azonban ez megtöri az ASCII-kompatibilitást, így nem javasolt. Az így kódolt PHP fájlok például a weboldal elején megjelenő ï»¿ karaktersorozatot eredményeznek.

Elterjedése 
Alapértelmezett kódolásként meglehetősen elterjedt Linux rendszereken, de a Microsoft Windows rendszer XP-től fölfelé is teljeskörűen támogatja.

Az IETF (Internet Engineering Task Force) minden internetprotokolltól megköveteli, hogy az általa használt kódolások között szerepeljen az UTF-8. Az IMC (Internet Mail Consortium) javaslata szerint minden e-mail kliensnek meg kell tudni jeleníteni az UTF-8 kódolású leveleket, és létre kell tudnia hozni azokat.

Megjegyzések

További információk 

 Hivatalos definíció a Unicode 5.2 szabványban (bitkódolás táblázata a 93. oldalon)

 Hivatalos definíció a Unicode 13.0 szabványban (bitkódolás táblázata a 124. oldalon)

 Átfogó Unicode leírás

Karakterkódolások

Internet

fi:Unicode#UTF-8