Over karaktersets
Wereldwijd zijn er nogal wat talen, naar schatting 6900. Mandarijn, een Chinese taal, is, met ca. 900 miljoen sprekers,
met afstand de grootste.
Het overgrote deel van die talen kan geschreven worden. Daar zijn (combinaties van) lettertekens en/of woordkarakters voor
nodig. Bij elkaar zijn er miljoenen verschillende tekens. Het West-Europese schrift heeft in de basis een alfabet met 26 letters.
Mandarijn kent ca. 9000 verschillende woordkarakters.
In de computer worden letters gerepresenteerd met getallen. Westerse karaktersets passen in 7 bits per karakter. Dat is
de aloude ASCII-tekenset, die van elke byte één bit ongebruikt laat.
Het ligt voor de hand om dat ongebruikte bit te gaan gebruiken voor extra karakters. Zo ontstond de ANSI-tekenset die o.a.
accenten heeft op sommige letters.
Elke taal heeft een eigen set karakters. Het is voor de doorsnee computergebruiker niet nodig om altijd alle bestaande
karakters beschikbaar te hebben. Een deelverzameling volstaat. Dat zijn de codepages bedacht, die voor elke taal of
taalgroep de omzetting regelen van een toetsaanslag of een binaire karaktercode uit een bestand, in een karakter op het scherm
en de printer.
In de begintijd van het PC-gebruik gebeurde het wel eens dat de ingestelde codepage bij de installatie van een nieuwe DOS-
en/of Windows-versie werd veranderd. In West Europa veranderde IBM codepage 437 dan in Windows codepage 1252, met vreemde
zij-effecten tot gevolg. Daarover lees je meer in dit
artikel.
Veel organisaties en bedrijven hebben hun eigen codepages bedacht. Dat heeft nogal wat onduidelijkheid veroorzaakt. De International Organization for Standardization (ISO) heeft getracht daar orde in te scheppen met standaarden waarvan ISO 8859 de belangrijkste is. Op Wikipedia staat een overzicht van de codepagina's die door ISO 8859 worden beschreven. Merk op dat daar overlappingen in zitten.
ISO 8859 codepagina's zijn 8-bit coderingen, wat betekent dat ze maximaal 256 karakters kunnen bevatten. Dit is niet voldoende
voor alle talen, daarom is Unicode (ISO 10646) ontwikkeld. Dat is een universele tekencodering die alle karakters
van alle talen ter wereld moet kunnen bevatten.
Dit doel lijkt te zijn behaald. Er zijn echter nog talen die nog niet op schrift zijn gesteld. Binnen
de mogelijkheden van de standaard lijkt daar ruimschoots plaats voor te zijn.
Er zijn bestaan ook verschillende codepages voor Windows, die vaak gebaseerd zijn op ISO 8859. Windows codepage 1252 is een
uitgebreidere versie van ISO 8859-1.
Unicode en UTF
Het Unicode Consortium heeft de UTF (Unicode Tranformation Format) standaarden ontwikkeld, omdat de ISO-8859 karakter-sets
beperkt zijn en niet compatibel in een meertalige omgeving.
De termen Unicode en UTF worden vaak door elkaar gebruikt. Toch is er een belangrijk verschil:
- Unicode is een karakterset, die karakters vertaalt in getallen. Zo'n getal heet code point. Gangbare notatie is U+hhhh, waarin U staat voor Unicode en hhhh voor een hexadecimaal getal van minimaal 4 cijfers
- UTF is een codeerstandard, die getallen omzet in binaire representatie.
UTF is er in drie smaken:
- UTF-8: Deze standaard heeft een variabele lengte: minimaal één en maximaal 4 bytes per
karakter. Deze codering is achterwaarts compatibel met ASCII.
ASCII karakters (U+0000 t.m. U+007F) beslaan 1 byte, code points U+0080 t.m. U+07FF beslaan 2 bytes, code points U+0800 t.m U+FFFF beslaan 3 bytes, code points U+10000 t.m. U+10FFFF beslaan 4 bytes. Het geheugengebruik is efficiënt. Het is goed voor Europese teksten, maar minder geschikt voor Aziatische.
UTF-8 is het meest gebruikte codeersysteem voor Websites, e-mail, programmeertalen en databases als MYSQL en MongoDb. - UTF-16: Deze standaard heeft een variabele lengte: minimaal twee en maximaal 4 bytes per karakter.
Code points U+0000 t.m. U+FFFF beslaan 2 bytes, code points U+10000 t.m. U+10FFFF beslaan 4 bytes. Het geheugengebruik is minder efficiënt dan bij UTF-8, maar wel sneller. Het is niet heel goed voor Europese teksten, maar het is prima geschikt voor Aziatische.
UTF-16 is het meest gebruikte codeersysteem voor Operating Systems (Windows, MacOS, Unix/Linux, …), de programmeertaal Java en binnen sommige file-formaten, waaronder XML en grafische formaten. - UTF-32: Deze standaard heeft een vaste lengte: altijd vier bytes per karakter. Dat maakt het een geheugenvreter, maar het werkt wel heel snel. Het wordt vanwege het geheugengebruik nauwelijks gebruikt.
Alle moderne browsers ondersteunen UTF-8, UTF-16, Windows-1252 en ISO 8859. In HTML is UTF-8 de aanbevolen standaard en
is daarom default.
Je definieert een karakterset in de <head> van een webpagina met:
<meta charset="UTF-8">
Vreemd genoeg geven webcrawlers en tools als als WebDev, een melding als een charset-meta-tag ontbreekt.
Voor dit item is onder meer gebruik gemaakt van onderstaande bronnen:
https://www.ef.nl/blog/language/meest-gesproken-taal-ter-wereld/
https://www.globaltalk.be/blog/7-moeilijke-talen-om-te-leren/
https://mojoauth.com/compare-character-encoding/utf-8-vs-utf-16/
Een ingang naar veel informatie is:
https://www.w3schools.com/charsets/ref_html_charsets.asp