Het idee van de UTF is om alle tekens die met 7-bits uit de voeten kunnen onveranderd te laten qua opslag [meestal in 8-bits] en dat wat meer nodig heeft die 2 maal 8-bits te gunnen. Kortom wij willen geen last hebben van wat zij daar in Oost-Europa en Azië doen. Het systeem wat daarvoor werd ingezet was heel simpel. De getallen direct boven de 127 gebruiken we als adres en aan elk adres kennen we b.v. 256 tekens toe. De lettertekens van Unicode boven de 127 verdelen we in brokken van elk 256 tekens. Komen we dus in onze tekst een [8-bits] teken boven de 127 tegen dan weten we dat het samen met de daaropvolgende 8-bit moet worden geinterpreteerd als een hoog Unicode / ISO 10646 teken. De algorithmes heen en weer zijn de UTF's [Unicode Transformation Format]. Het grote nadeel van deze manier van UTF is dat we nog steeds niet 1-duidig weten of een los byte als ASCII geinterpreteerd moet worden of in combinatie met een adres-byte als Unicode. |
UTF was deviced to leave unchanged the 7-bit characters [ASCIII 000-127] and to have those characters that needed it to be stored in a 3-byte coding. In other words, as long as we are not bothered with the characters of Eastern Europe or Asia, it's alright with us. The system is very easy: the numbers just above 127 will be used for reference purposes and within each address some 256 [at the most] characters will be placed. So split up the above 127 characters of the Unicode space into portions of 64 / 128 / 256. Everytime we find an above 127 value we know we have to combine it with the following byte[s] and interprete this as a 'high' Unicode / ISO 10646 character. The algoritms for encoding and decoding are called the UTF's [Unicode Transformation Format]. A disadvantage of such an encoding/decoding device might be that we won't know for sure when to interprete a loose byte as ASCII and when a combination as Unicode. |
UTF-8 komt grotendeels tegemoet aan dat bezwaar en heft de beperking van 16-bits [2 bytes] op: Aan de eerste bits is te zien in hoeveel bytes het teken is gecodeerd. Met 4 bytes [en dus 21 bits] zijn ruim 1 miljoen combinaties te maken. En dat zou voldoende moeten zijn, maar theoretisch kunnen we verder! Er kan geen enkele byte ten onrechte als 'laag'nummer [dus ASCII] worden opgevat omdat het eerste bit altijd '1' is. En wel met een waarde liggend tussen [hexadecimaal] 80 en 7F. Ook is altijd de eerste byte te onderscheiden van de volgende. |
The UTF-8 algorithm overcomes most disadvantages. You can tell by the first bits how may bytes will follow. A 4-byte code [i.e. 21 bits] should be sufficient for a million combinations. An even wider code will give us even more! Not a single byte can be interpreted as a 'low' or ASCII value as the first bit is always a '1'. The byte-value will never surpass the 80 - 7F [hexadecimal] limits. And also the first byte differs from the rest. |
bytes bits representatie 1 7 0vvvvvvv 2 11 110vvvvv 10vvvvvv 3 16 1110vvvv 10vvvvvv 10vvvvvv 4 21 11110vvv 10vvvvvv 10vvvvvv 10vvvvvv 5 26 111110vv 10vvvvvv 10vvvvvv 10vvvvvv 10vvvvvv 6 31 1111110v 10vvvvvv 10vvvvvv 10vvvvvv 10vvvvvv 10vvvvvv
For the programmers among us / Voor de programmeurs onder ons:
putwchar(c) { if (c < 0x80) { putchar (c); } else if (c < 0x800) { putchar (0xC0 | c>>6); putchar (0x80 | c & 0x3F); } else if (c < 0x10000) { putchar (0xE0 | c>>12); putchar (0x80 | c>>6 & 0x3F); putchar (0x80 | c & 0x3F); } else if (c < 0x200000) { putchar (0xF0 | c>>18); putchar (0x80 | c>>12 & 0x3F); putchar (0x80 | c>>6 & 0x3F); putchar (0x80 | c & 0x3F); } }
|
Hoe zien de UTF-codes er in de praktijk uit? Het zoeken op het Internet leverde enkele bruikbare HTML-files
[met als tag: <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"> ]
op met tegelijk een goed overzicht van de Poolse ogonki. Het systeem levert voor de hele reeks van lettertekens het volgende op |
How do these UTF-codes look like in practice? Searching the Internet for practical HTML-files
[having the <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"> tag]
I came up with some useful Polish texts. Three bytes cover the following range. |
Voor de Poolse ogonki zijn de volgende codes / The Polish ogonki have the following codes:
Copyright © Rein Bakhuizen van den Brink Last updated on 26 december 2000 |