UTF-8

UTF-8 (8-bit Unicode Transformation Format) – viena kintamo ilgio simbolių koduočių, kuria galima užrašyti bet kokį Unikodo simbolį bei lieka ir pilnas suderinamumas su 7 bitų ASCII koduote, pritaikyta anglų kalbos abėcėlei.

UTF-8 dažnai naudojama internete, kur dėl istorinių suderinamumo priežasčių ar dėl taupumo ne visada galima pereiti prie UTF-16 koduotės.

Techninės charakteristikos 
UTF-8 yra Unikodo tipo koduotė, kurioje vienam simboliui skiriama nuo 1 baito iki 4 baitų.

Po 1 baitą užima Angliškos abėcėlės simboliai, skaičiai, skyrybos ženklai. Taip koduojami 128 simboliai, kurių kodai priklauso ASCII koduotei, Unikode užimančiai sritį nuo U+0000 iki U+007F.

Po 2 baitus užima išplėstiniai lotyniški rašmenys (ir lietuviškos raidės), graikų, armėnų, koptų, hebrajų ir arabų abėcėlių bei kirilicos raidės.

Po 3 baitus užima raidės kitų rašto sistemų (japonų, kinų, kitų Azijos tautų).

Po 4 baitus užimantys simboliai yra labai reti (juos ir UTF-16 koduoja ne dviem, o keturiais baitais).

5 baitų ir 6 baitų simbolius numatė pradinė specifikacija, bet 2003 m. lapkričio RFC 3629 dokumentas apribojo UTF-8 simbolius iki 4 baitų.

Kaip ir kitoms UTF koduotėms, apie baitų tvarką galima teksto dorojimo programą galima įspėti specialia baitų tvarkos žyme, tačiau konkrečiu UTF-8, kur koduojamo teksto baitų tvarka visada vienoda, triženklė žymė naudojama tik informavimui apie pačios UTF-8 buvimą.

Kodavimo algoritmas 
Simboliai, kurių Unikodo kodai mažesni už 128 (80 šešioliktainėje sistemoje) koduojami taip pat kaip ir atitinkami 7 bitų ASCII simboliai. Tam išnaudojamos visos baito reikšmės, kurių vyriausias bitas lygus 0. Taip koduojami ne vien rodomieji simboliai, bet ir eilutės pabaiga (0D) bei kiti specialūs ženklai.

Kitais atvejai prireikia iki keturių baitų. Vyriausias šių baitų bitas visada lygus 1, taip juos atskiriant nuo anksčiau minėtų ASCII ženklų.

Pavyzdžiai 
Raidė aleph (א), Unicode kodas U+05D0, koduojamas UTF-8 tokiu būdu:
 Jis priklauso intervalui nuo U+0080 iki U+07FF. Iš lentelės matyti, jog toks simbolis turi būti koduojamas dviem baitais, 110xxxxx ir 10xxxxxx.
 šešioliktainis skaičius 05D0 dvejetaine sistema užrašomas kaip 101 1101 0000.
 Šie vienuolika bitų užima x pažymėtas pozicijas: 11010111 10010000.
 Galutinis rezultatas yra du baitai, D7 ir 90 (abu užrašyti šešioliktaine sistema). Tai ir yra alef raidės UTF-8 kodas.

Kiti pavyzdžiai:

Koduotės UTF-8 privalumai 
 Lotyniškos (anglų kalbos) raidės bei pagrindiniai skyrybos ženklai vienu baitu koduojami taip pat, kaip ir ASCII bei daugeliu paplitusių senesnių koduočių. Todėl tokie rašmenys teisingai atvaizduojami senesnių programų, kurios nenumato Unikodo panaudojimo.
 Jei didžioji dalis simbolių koduojami vienu baitu, UTF-8 koduote saugomas tekstas užima žymiai mažiau vietos, nei UTF-16 (USC-2) koduote.
 Šiai koduotei įmanoma pritaikyti blogo simbolio taisyklės paieškos algoritmą.
 Bent kiek ilgesnę UTF-8 eilutę nesunku atpažinti. Kitaip tariant, tikimybė, jog teisingai UTF-8 koduotės požiūriu atrodanti baitų seka iš tiesų slepia kaip nors kitaip koduotą tekstą yra menka. Pavyzdžiui, baitai C0, C1, ir nuo F5 iki FF UTF-8 dokumente niekada nesutinkami.
 Nors simbolių ribos nėra visiškai akivaizdžios, palyginus su kitomis koduotėmis jos randamos gana lengvai.
 Baitų seka, koduojanti vieną simbolį, niekada nėra sekos, koduojančios kokį nors kitą simbolį, dalis. Pavyzdžiui, minėtiems ASCII rašmenims koduoti skirti baitai ir koduoja vien tik ASCII rašmenis.
 Iš pirmojo simbolio baito akivaizdu, kiek baitų yra skirta simboliui koduoti.
 Kodavimas nereikalauja palyginus lėtų daugybos ar dalybos operacijų (anksčiau naudotam UTF-1 jos buvo reikalingos).

Koduotės UTF-8 trūkumai 
 Jei teksto didžiąją dalį sudaro Azijos kalbų rašmenys UTF-8 koduotas tekstas užims daugiau vietos.
 Teksto eilutei skiriamas baitų skaičius priklauso ne tik nuo ženklų skaičiaus, bet ir nuo turinio, tai yra nuo to, kiek baitų skiriama rašmenims koduoti. Dėl to pagal baitų skaičių neįmanoma nustatyti eilutės ilgio, o senosios programos, kurios eilutės ilgį nustato pagal baitų skaičių, klaidingai atvaizduoja tekstą (pvz., „sugriūva“ tekstinės lentelės).
 Koduotė reikalauja perduoti visus aštuonis baito bitus. Alternatyvi koduotė UTF-7 reikalauja perduoti tik pirmus septynis bitus, kurių pakako ir ASCII. Kai kuri duomenų perdavimo įranga aštuntą bitą naudoja savo specialiems tikslams ir UTF-8 užkoduoto teksto tiesiogiai perduoti negali.

Nuorodos 
Lietuviški šaltiniai:
 Prof. Gintauto Grigo rekomendacijos
 Ričardo Čepo svetainė apie Unicode 

Anglų kalba:
 RFC 3629, UTF-8 standarto aprašymas
 RFC 2277, IETF politika dėl koduočių ir kalbų
 UTF-8
 Rob Pike tells the story of UTF-8's creation
 Original UTF-8 paper 
 Free online Lithuanian charset converter

Standartai

fi:Unicode#UTF-8