Is "ë" de nieuwe spelling van "ë"?
Dit artikel legt uit waarom er soms rare tekens in beeld komen.
Computers hebben een character set nodig om te werken met tekst en andere tekens, dit is een lijst van alle mogelijke tekens, die elk een eigen positie hebben. Zo staat 'A' bijvoorbeeld op positie 65 en 'B' op 66.
Het woord 'Hallo' wordt niet letterlijk zo opgeslagen, maar als posities 72, 97, 108, 108 en 111. Het is belangrijk dat een computer weet welke tekens daar aan gekoppeld zijn, want met een verkeerde character set komt er heel wat anders uit. Aangezien er honderden character sets bestaan, is dat ook daadwerkelijk een probleem.
Unicode
Om dat probleem op te lossen, heeft het Unicode Consortium de character set 'Unicode' bedacht, die universeel over de hele wereld werkt, in alle talen. In deze set zitten niet alleen letters, cijfers en leestekens, maar bijvoorbeeld ook Mahjong symbolen, pijlen en wiskundige symbolen. Op het moment van schrijven zitten er 149.186 tekens in de Unicode character set.
In de gigantische set van tekens komen ook emoji's voor, elke emoji is dus eigenlijk gewoon een "letter". Hoe een emoji op een smartphone in beeld komt, kan verschillen tussen merken, op dezelfde manier als dat de letter 'A' er in verschillende lettertypes anders uitziet. Elk merk kan dus een eigen "lettertype" voor emoji's hebben.
Voordat Unicode bestond, was ISO-8859-1 de standaard character set in West-Europa, hierin zitten 256 tekens. Deze set zit als eerste onderdeel in Unicode, wat betekent dat bijvoorbeeld het teken 'ë' op dezelfde positie (235) zit in zowel ISO-8859-1 als in Unicode.
Als 'ë' op dezelfde positie zit in beide character sets, waarom komt er dan soms 'ë' in beeld?
Encoding
Een character set is cruciaal, maar een computer moet nog wel snappen hoe tekens als nulletjes en eentjes opgeslagen moeten worden, en andersom, hoe bytes weer in beeld getoond moeten worden. Daar is een encoding voor nodig.
De character set ISO-8859-1 heeft een encoding met dezelfde naam. Unicode heeft meerdere encodings, waarbij UTF-8 de meest voorkomende is.
Het teken 'ë' heeft positie 235, wat in binair 11101011 is. Deze 8 bits vormen één byte. De maximumwaarde van een byte is 255: elke bit heeft 2 mogelijkheden (0 of 1) en met 8 bits zijn er 28 mogelijkheden, dat is 255 als je vanaf 0 telt. ISO-8859-1 bevat 256 tekens, dus alle mogelijke posities passen in 1 byte. Voor ISO-8859-1 encoding is verder niks nodig, de binaire waarde van de positie (11101011) is genoeg.
UTF-8 ondersteunt maximaal 4 bytes en hierbij is wat extra moeite nodig. Alle posities t/m 127 (dat zijn 7 bits, dus 27) beginnen in binair met een 0, bijvoorbeeld 106: 01101010. Voor deze posities gebeurt er niets bijzonders, dit blijft hetzelfde. Voor alle posities vanaf 128 komt er iets meer bij kijken.
In UTF-8 geeft de eerste byte het aantal benodigde bytes aan: '110' staat voor 2 bytes, '11110' voor 4. Vervolg-bytes beginnen altijd met '10'. De overige bits zijn gevuld met bits van het teken, aangevuld met nullen om tot hele bytes te komen (veelvouden van 8 bits).
Het voorbeeld 'ë' (positie 235, 11101011 in binair) wordt daardoor 11000011 10101011. Zonder de eerste bits is dit namelijk 00011 en 101011, oftewel 00011101011, de 3 nullen aan de linkerkant zijn aangevuld.
En hier volgt het probleem: 11000011 is 195 in decimaal, 10101011 is 171. In de ISO-8859-1 character set staan op deze posities de tekens à en «. Dat is de reden waarom tekst geschreven met UTF-8 encoding er heel anders uit kan zien bij het uitlezen met een andere encoding, zoals ISO-8859-1.
Emoji
De ghost emoji (👻) staat op positie 128.123 in de Unicode character set, in binair is dat 11111010001111011. Met UTF-8 encoding worden dat 4 bytes: 11110000 10011111 10010001 10111011.
Nieuwste artikelen
De twee gezichten van Kunstmatige Intelligentie
Volgende artikel
De twee gezichten van Kunstmatige Intelligentie