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