UTF-8 (Unicode Transformation Format 8-bit) er en tabsfri indkodning af Unicode-tegnsættet. Den blev udviklet af Ken Thompson og Rob Pike den 2. september 1992 i New Jersey, USA.

UTF-8 anvender grupper af 8-bit bytes til at repræsentere Unicode-standarden for verdens mange forskellige alfabeter. UTF-8 er især anvendelig ved transport af e-post i 8-bits postsystemer.

Den bruger 1 – 6 bytes (eller 8 til 48 bit) per tegn – afhængig af Unicode-symbolet. Eksempelvis kræves kun én byte for at kunne kode alle 128 ASCII-tegn i Unicode intervallet: U+0000 til U+007F.

UTF-8 er i (2003) blevet begrænset til 4 byte sekvenser, da dette er nok til at indkode hele unicode området fra U+0000 til U+10FFFF.

Indkodning

Tegn i intervallet U+0000 til U+007F, dvs. 7-bit ASCII indkodes uændret. Andre tegn indkodes ved at bruge 2 til 4 bytes, som alle er større end 7F.

Unicode intervalhexadecimal Bit værdibinær UTF-8binær Noter 000000–00007F 128 tegn 0zzzzzzz 0zzzzzzz 7-bits ASCII område; byte begynder med en 0-bit syv z syv z 000080–0007FF 1920 tegn 00000yyy yyzzzzzz 110yyyyy 10zzzzzz Første byte begynder med 110, den næste byte begynder med 10. tre y; to y, seks z fem y; seks z 000800–00FFFF 63488 tegn xxxxyyyy yyzzzzzz 1110xxxx 10yyyyyy 10zzzzzz Første byte begynder med 1110, de efterfølgende bytes begynder med 10. fire x,fire y; to y,seks z fire x; seks y; seks z 010000–1FFFFF 2.031.616 tegn 000vvvxx xxxxyyyy yyzzzzzz 11110vvv 10xxxxxx 10yyyyyy 10zzzzzz Første byte begynder med 11110, de efterfølgende bytes begynder med 10. tre v, to x; fire x, fire y; to y, seks z tre v; seks x; seks y; seks z 00200000–03FFFFFF 65.011.712 tegn 000000uu vvvvvvxx xxxxyyyy yyzzzzzz 111110uu 10vvvvvv 10xxxxxx 10yyyyyy 10zzzzzz Første byte begynder med 111110, de efterfølgende bytes begynder med 10. to u, seks v, to x; fire x, fire y; to y, seks z to u, seks v; seks x; seks y; seks z 04000000–7FFFFFFF 1.073.741.824 tegn 0tuuuuuu vvvvvvxx xxxxyyyy yyzzzzzz 1111110t 10uuuuuu 10vvvvvv 10xxxxxx 10yyyyyy 10zzzzzz Første byte begynder med 1111110, de efterfølgende bytes begynder med 10. et t, seks u, seks v, to x; fire x, fire y; to y, seks z et t, seks u, seks v; seks x; seks y; seks z

Da unicode er begrænset til U+10FFFF stopper standarden () i dag ved fire byte sekvenser, selvom længere sekvenser tidligere har været defineret.

Følgende byteværdier kan således ikke forekomme i en UTF-8 streng i henhold til standarden

Værdi (binær) Værdi (hexadecimal) Noter 1100000x C0, C1 Forkert indkodning af værdier mindre end 7F. Byten indikerer starten af en 2 byte sekvens, men værdien er mindre end 7F. 1111111x FE, FF Ulovlig: start byte for en 7/8 byte sekvens. 111110xx1111110x F8, F9, FA, FB, FC, FD Fjernet af : start byte for en 5/6 byte sekvens. 111101011111011x F5, F6, F7 Fjernet af : start byte for værdier mellem 10FFFF og 1FFFFF.

Fordele og ulemper

Generelle fordele UTF-8 er en ægte udvidelse af ASCII standarden, hvilket betyder at en ASCII tekst ikke skal konverteres men også er en UTF-8 tekst. Det er forholdsvis nemt at identificere en UTF-8 tekst. Sandsynligheden for at en tekst indkodet i en anden 8-bits standard (f.eks. ISO 8859) bliver forvekslet med en UTF-8 streng er ret lille.

Generelle ulemper En dårlig implementering kan acceptere ulovlige indkodninger og konvertere dem til korrekt indkodning af den samme unicode tekst og dermed forvanske strenge i andre indkodninger.

Fordele sammenlignet med UTF-16 Bytes med værdien 0 vil kun forekomme i en UTF-8 tekst, hvis unicode tegnet U+0000 indkodes. Dette er en fordel i programmer, som benytter en 0 byte som strengterminator. Tekster som primært er skrevet i ASCII (f.eks. normale vesteuropæiske tekster) vil være ca. halv størrelse i UTF-8, da langt de fleste tegn kan indkodes i en byte mod to i UTF-16.

Ulemper sammenlignet med UTF-16 Tekster der benytter tegn større end U+0800, f.eks. kinesiske og japanske tekster, vil fylde op til en halv gang mere i UTF-8. Dette modvirkes til dels af at mellemrum, tegn, linieskift og lignende kan indkodes i én byte i UTF-8.

Eksterne henvisninger UTF-8 and Unicode FAQ for Unix/Linux

Kategori:Tegnrepræsentationer