UTF-8

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

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
0zzzzzzz0zzzzzzz7-bits ASCII område; byte begynder med en 0-bit
syv zsyv z
000080–0007FF
1920 tegn
00000yyy yyzzzzzz110yyyyy 10zzzzzzFørste byte begynder med 110, den næste byte begynder med 10.
tre y; to y, seks zfem y; seks z
000800–00FFFF
63488 tegn
xxxxyyyy yyzzzzzz1110xxxx 10yyyyyy 10zzzzzzFørste byte begynder med 1110, de efterfølgende bytes begynder med 10.
fire x,fire y; to y,seks zfire x; seks y; seks z
010000–1FFFFF
2.031.616 tegn
000vvvxx xxxxyyyy yyzzzzzz11110vvv 10xxxxxx 10yyyyyy 10zzzzzzFørste byte begynder med 11110, de efterfølgende bytes begynder med 10.
tre v, to x; fire x, fire y; to y, seks ztre v; seks x; seks y; seks z
00200000–03FFFFFF
65.011.712 tegn
000000uu vvvvvvxx xxxxyyyy yyzzzzzz111110uu 10vvvvvv 10xxxxxx 10yyyyyy 10zzzzzzFø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 zto u, seks v; seks x; seks y; seks z
04000000–7FFFFFFF
1.073.741.824 tegn
0tuuuuuu vvvvvvxx xxxxyyyy yyzzzzzz1111110t 10uuuuuu 10vvvvvv 10xxxxxx 10yyyyyy 10zzzzzzFø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 zet 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
1100000xC0, C1Forkert indkodning af værdier mindre end 7F. Byten indikerer starten af en 2 byte sekvens, men værdien er mindre end 7F.
1111111xFE, FFUlovlig: start byte for en 7/8 byte sekvens.
111110xx
1111110x
F8, F9, FA, FB, FC, FDFjernet af RFC 3629: start byte for en 5/6 byte sekvens.
11110101
1111011x
F5, F6, F7Fjernet af RFC 3629: 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

ProgrammeringSpire
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.