UTF-8
Van Wikipedia
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. Het alternatief heet UTF-16.
UTF-8 is een tekencodering met een variabele lengte: niet elk teken gebruikt evenveel bytes. Afhankelijk van het teken worden tussen 1 en 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 het zo dat UTF-8 eenvoudig in gebruik is omdat de codering van een tekst met uitsluitend ASCII-tekens in ASCII en UTF-8 gelijk is.
[bewerk] 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.
Codegebied hexadecimaal |
UTF-16 | UTF-8 binair |
Opmerking |
---|---|---|---|
000000 - 00007F | 00000000 0xxxxxxx | 0xxxxxxx | ASCII equivalenten; byte begint met nulbit |
000080 - 0007FF | 00000xxx xxxxxxxx | 110xxxxx 10xxxxxx | eerste byte begint met 110, tweede met 10 |
000800 - 00FFFF | xxxxxxxx xxxxxxxx | 1110xxxx 10xxxxxx 10xxxxxx | eerste byte begint met 1110, volgende met 10 |
010000 - 10FFFF | 110110xx xxxxxxxx 110111xx xxxxxxxx |
11110xxx 10xxxxxx 10xxxxxx 10xxxxxx | eerste byte begint met 11110, volgende met 10 |
[bewerk] 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.
- Bestandsnaam routines voor ASCII werken met UTF-8 correct (alle speciale tekens in bestandnamen en paden zitten in het 0..127 gebied)
- De variabele lengte van de tekens in UTF-8 is makkelijk te decoderen.
- UTF-8 is de standaardcodering voor XML-bestanden.
[bewerk] Nadelen
- De variabele lengte maakt het lastiger om direct met tekenstrings te werken in veel programmeertalen. Dit kan worden opgelost door hiervoor de juiste bibliotheken te gebruiken.
- Veel oosterse karakters gebruiken 3 bytes in UTF-8 terwijl ze slechts 2 bytes zouden gebruiken in UTF-16. Hierdoor wordt tekst in deze talen groter dan noodzakelijk.