UTF-8
UTF-8 (8-bit Unicode Transformation Format) is een manier om Unicode/ISO 10646-tekens op te slaan als een stroom van bytes, een zogenaamde tekencodering. Alternatieven zijn UTF-16 en UTF-32.
UTF-8 is een tekencodering met een variabele lengte: niet elk teken gebruikt evenveel bytes. Afhankelijk van het teken worden 1 tot 4 bytes gebruikt. Voor het vastleggen van elk van de 128 ASCII-tekens is slechts één byte nodig.
Hoewel het niet efficiënt lijkt om Unicodetekens in 4 bytes te moeten coderen, is UTF-8 eenvoudig in gebruik omdat de codering van een tekst met uitsluitend ASCII-tekens in ASCII en UTF-8 gelijk is.
Inhoud |
[bewerken] Beschrijving
UTF-8 is gestandaardiseerd als RFC 3629 (UTF-8, a transformation format of ISO 10646).
Samenvattend worden de Unicodetekens in groepen bits ingedeeld, die worden verdeeld over de lage bits van de UTF-8-bytes.
Tekens 0-127, de ASCII-tekens, kunnen direct worden gecodeerd in een byte met het hoogste bit 0. Voor andere tekens zijn tot 4 bytes nodig. Alle bytes voor zulke tekens hebben het hoogste bit 1, zodat verwarring met de ASCII-tekens wordt voorkomen.
In dat laatste geval zijn de hoogste twee bits gelijk aan '11' bij de eerste byte en '10' bij de opeenvolgende byte(s). Hierdoor kan altijd het begin van een UTF-8 code worden gevonden. De positie van de hoogste '0' in de beginbyte geeft aan uit hoeveel bytes de code is samengesteld.
| Codegebied hexadecimaal |
UTF-32 binair |
UTF-16 binair |
UTF-8 binair |
Opmerking over de UTF-8-code |
|---|---|---|---|---|
| 000000 - 00007F | 00000000 00000000 00000000 0aaaaaaa |
00000000 0aaaaaaa | 0aaaaaaa | ASCII-equivalenten; byte begint met nulbit |
| 000080 - 0007FF | 00000000 00000000 00000bbb aaaaaaaa |
00000bbb aaaaaaaa | 110bbbaa 10aaaaaa | eerste byte begint met 110, tweede met 10 |
| 000800 - 00FFFF | 00000000 00000000 bbbbbbbb aaaaaaaa |
bbbbbbbb aaaaaaaa | 1110bbbb 10bbbbaa 10aaaaaa | eerste byte begint met 1110, volgende met 10 |
| 010000 - 10FFFF | 00000000 000ccccc bbbbbbbb aaaaaaaa |
110110dd ddbbbbbb 110111bb aaaaaaaa |
11110ccc 10ccbbbb 10bbbbaa 10aaaaaa | eerste byte begint met 11110, volgende met 10 dddd = ccccc - 1 |
[bewerken] Toegestane karakters
Volgens de oorspronkelijke specificatie kon een UTF-8 code uit maximaal zes bytes bestaan. Om compatibiliteit met UTF-16 te garanderen werd dit verkort tot maximaal vier bytes en werd het aantal toegestane karakters beperkt tot 0x10FFFF.
Wanneer een UTF-8 karakter op meerdere manieren kan worden samengesteld dan is alleen de kortste vorm hiervan toegestaan. Unicode 0x7F kan bijvoorbeeld worden vertaald naar UTF-8 karakter 0x7F maar ook naar de ongeldige reeks 0xC1 0xBF.
Een omzetter voor UTF-8 code dient tekst met ongeldige karakters te verwerpen vanwege beveiligingsrisico's.
[bewerken] Voordelen
- Omdat veel westerse letters slechts 1 byte in beslag nemen, is UTF-8 voor westerse talen compacter dan het eenvoudigere UTF-16.
- Het is veel eenvoudiger om Unixsystemen compatibel te maken met UTF-8 dan met UTF-16, bijvoorbeeld omdat UTF-16 veel nulbytes bevat, die in ASCII-systemen een speciale betekenis hebben.
- UTF-8-strings kunnen worden gesorteerd alsof ze byte-strings zijn.
- Woordbreekroutines voor ASCII werken met UTF-8 correct zonder wijziging.
- Bestandsnaamroutines voor ASCII werken met UTF-8 correct (alle speciale tekens in bestandsnamen en paden zitten in het gebied 0..127)
- De variabele lengte van de tekens in UTF-8 is makkelijk te decoderen.
- UTF-8 is de standaardcodering voor XML-bestanden.
[bewerken] Nadelen
- De variabele lengte maakt het in veel programmeertalen lastiger om direct met tekenstrings te werken. Dit kan worden opgelost door hiervoor de juiste bibliotheken te gebruiken. Bijvoorbeeld in Flash is het commando System.useCodepage=true nodig om UTF-8 te kunnen gebruiken.
- Veel oosterse karakters gebruiken 3 bytes in UTF-8 terwijl ze slechts 2 bytes zouden gebruiken in UTF-16. Hierdoor worden tekstbestanden in deze talen groter dan in UTF-16.
[bewerken] Gebruik
UTF-8 werd in 1993 geïntroduceerd. Rond het jaar 2000 stapten de Linux-besturingssystemen over naar UTF-8 als standaard voor alle tekstbestanden (inclusief scriptbestanden). Aan de bestanden zelf is niet te zien of deze in UTF-8 gecodeerd zijn. Dat blijkt pas bij het bekijken van de tekst.
Microsoft heeft ook de UTF-8-codering toegevoegd. Indien in Microsoft Windows een tekstbestand met de UTF-8-codering wordt opgeslagen, dan voegen Microsoftprogramma's de drie bytes 0xEF, 0xBB, 0xBF, de UTF-8-code voor U+FEFF, aan het begin van het bestand toe, het "Byte Order Mark", of kortweg "BOM", dat echter niet altijd door andere programma's goed herkend wordt.
Webpagina's kunnen ook UTF-8 gebruiken. In de broncode van de webpagina's wordt dan aangegeven dat het om UTF-8-code gaat. De meesten geven de voorkeur aan UTF-8 voor webpagina's, omdat dit bij andere talen minder onduidelijkheden geeft dan de ASCII- of ANSI-codering. Wikipedia gebruikt bijvoorbeeld UTF-8 voor de broncode van de webpagina's en ook in e-mail wordt steeds vaker de UTF-8-codering gebruikt.[1]
[bewerken] Externe link
- UTF-8-tabellen - UTF-8-tekens in een aantal variëteiten getoond
| Referenties |