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 RFC 3629 (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 redigér

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 interval
hexadecimal
Bit værdi
binær
UTF-8
binæ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 (RFC 3629) 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.
111110xx
1111110x
F8, F9, FA, FB, FC, FD Fjernet af RFC 3629: start byte for en 5/6 byte sekvens.
11110101
1111011x
F5, F6, F7 Fjernet af RFC 3629: start byte for værdier mellem 10FFFF og 1FFFFF.

Fordele og ulemper redigér

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 tildels af at mellemrum, tegn, linieskift og lignende kan indkodes i én byte i UTF-8.

Eksterne henvisninger redigér

 Spire
Denne artikel om datalogi eller et datalogi-relateret emne er en spire som bør udbygges. Du er velkommen til at hjælpe Wikipedia ved at udvide den.