UTF8

Maandag, 30 mei 2005
UTF8 is wonderlijk. Het is één codering die de Romeinse letters a-z aan kan, maar ook Russisch, Grieks en Arabisch. Dat zijn andere letters, maar nog wel alfabetten van vergelijkbare groottes, elk een paar tientallen letters.

Wat me echt verbaast is dat al die tekens op één en dezelfde bladzijde kunnen staan. Hoe kan dat? De 256 mogelijke combinaties van de ASCII code houden toch een keertje op? Het wordt nog bonter als op dezelfde bladzijde ook net zo vrolijk Chinese en Japanse karakters staan, talen met duizenden karakters.

Hoe werkt die UTF8 codering?

Wie de HTML source van columbia.edu/kermit/utf8.html met een ASCII editor bekijkt ziet allemaal vreemde karakters. Het lijkt wel hexadecimale data, maar hoe is het gecodeerd? Er komen karakters op het scherm zonder dat ik de truuk snap. Aargh, reutel raheugh, UTF8 is een toverdoos!

De puzzel wordt nog groter. Het lijkt onmogelijk om de tweede byte van een Japans karakter op een carriage return of een quote x'22' te laten lijken. Een test PHP scriptje genereert waarden met x'2D' als laatste byte. Wonderlijk genoeg lijkt UTF8 die gevaarlijke byte waardes over te slaan. Het lukt niet om een gevaarlijk karakter op het scherm te krijgen. Een copy paste van gegenereerde browser tekst naar een hex editor laat geen gevaarlijke waardes zien. Huh? Waar is de x'2D' waarde gebleven in de laatste byte?

Deze puzzel moet opgelost worden. Hoe werkt die codering van UTF8?

Uitleg van UTF8 codering

De wikipedia verklaart de UTF8 codering. Deze codering lijkt wat verkwistend met bits maar is erg zuinig met bytes.

Conclusie

Tot de volgende noot,
Henk Jan Nootenboom

Met grote dank aan de heren van 4uIT voor de UTF8 research.