‘Karaktercodering’ (character encoding) is een term voor een mechanisme dat achter de schermen van vrijwel ieder digitaal document plaatsvindt. Het vertelt een computer uit welke karakters (letters, cijfers, punctuatietekens, enzovoort) een document is opgebouwd: bytes worden vertaald naar karakters en andersom.

Inhoudsopgave


Karaktercodering gaat over schrift, niet over taal

Karaktercodering gaat over wat voor de computer een karakter is, en niet over hoe het voor de computergebruiker wordt weergegeven.

Met betrekking tot taal heeft karaktercodering te maken met het schrift, en niet met woordenschat, grammatica en uitspraak. Zo kan een Engelstalige tekst geschreven worden in Japanse karakters (zij het moeizaam) en een Japanstalige tekst in westerse karakters. De tekst blijft in de oorspronkelijke taal, alleen de schrijfwijze is anders. Zie ook het hoofdstuk Talen.

Met het oog op internationalisering en ondersteuning voor uiteenlopende talen en schriften, is voor HTML 4.01 een aantal regels opgesteld voor het specificeren van karakters in webpagina’s. Voor de correcte weergave van karakters op webpagina’s beschikken webontwikkelaars over een karakterset en karakterreferenties. Webontwikkelaars moeten altijd een karakterset specificeren voor pagina’s en kunnen daarnaast vrij karakterreferenties gebruiken.

Gerelateerde richtlijnen

  • R-pd.16.1: Specificeer de karakterset voor webpagina’s.
  • R-pd.16.2: Specificeer de utf-8 karakterset.
  • R-pd.16.3: Specificeer de karakterset ook via HTTP headers, indien mogelijk.
  • R-pd.16.4: Gebruik (minstens) het meta element voor het specificeren van de karakterset en plaats dit element zo hoog mogelijk in de head sectie van de markup.

Naar boven


Karaktercodering in een notedop

Referentiegetallen naar tabellen

Voor computers zijn documenten niet meer dan lange rijen enen en nullen: bits. Wanneer een computergebruiker in een tekstverwerkingsprogramma de letter A typt, ziet de computer dit als een getal dat refereert naar een positie in een karaktertabel (karakterset) waar het karakter voor de letter A voorkomt.

Wanneer de karakterset voor het document gespecificeerd staat als bijvoorbeeld US-ASCII (een veel voorkomende basisset), dan is de letter A voor de computer het getal 65 (in enen en nullen: 01000001) dat verwijst naar positie 65 in de US-ASCII karakterset.

Als het document opgeslagen wordt en later opnieuw door een programma gelezen wordt, weet het programma dat het de letter A moet weergeven voor het referentiegetal 65.

Verschillende karaktersets en uitwisselbaarheid

Er zijn tientallen karaktersets beschikbaar, elk met een eigen repertoire aan karakters. De meeste beschikken over het karakter voor de letter A, maar de positie van dit karakter is niet overal 65.

Wanneer de computer bij het lezen van een bestand niet kan achterhalen wat de gebruikte karakterset is, zal het moeten raden. Dit kan leiden tot een foutief gegokte karakterset en merkwaardige teksten. In sommige karaktersets staan op bepaalde posities in de karaktertabel zelfs lege karakters; dit verklaart waarom soms geopende tekstbestanden vreemde symbolen tonen op plaatsen waar een leesteken had moeten staan.

Overlappende karaktersets

Veel karaktersets hebben overlappende repertoires aan karakters. Hierdoor zullen zich pas problemen voordoen wanneer documenten karakters bevatten die zich buiten deze overlappende delen bevinden. Meestal zijn dit punctuatietekens of karakters met accenten.

Vrijwel alle karaktersets bevatten de basis ASCII-tekenset: 128 accentloze karakters, voldoende voor het weergeven van westerse schriften, met uitzondering van geaccentueerde karakters zoals die voorkomen in bijvoorbeeld Nederlandse, Franse en Scandinavische talen. Dankzij deze basis zullen teksten die hoofdzakelijk uit westers schrift bestaan altijd redelijk leesbaar zijn, ongeacht welk probleem zich met interpretatie van de karakterset door software voordoet. Het bestaan van de grote hoeveelheid geaccentueerde karakters in de Nederlandse taal verklaart waarom karaktercodering bij het bouwen van websites nadruk verdient.

Windows karakterset

Op het eerste gezicht lijkt het op Nederlandstalige websites goed te gaan met geaccentueerde karakters, maar schijn bedriegt: de meeste webontwikkelaars zijn zich niet bewust van karaktercodering en produceren websites die standaard volgens de Windows karakterset worden opgeslagen.

De meeste bezoekers van deze websites gebruiken als browser Microsoft Internet Explorer, die, tenzij de webontwikkelaar anders specificeert, volgens de Windows karakterset werkt. Geaccentueerde karakters komen daardoor voor deze groep correct over. Bezoekers die aan een ander profiel voldoen, zoals Macintosh-gebruikers en bezoekers met andere browsers, ondervinden problemen met deze karakters omdat hun software naar een andere karakterset grijpt.

Links en referenties

Naar boven


Waarom een karakterset specificeren belangrijk is

  • Browsers hoeven niet te raden naar de karakterset van een pagina.Dit voorkomt weergaveproblemen wanneer er foutief wordt gegokt.
  • Het specificeren van de karakterset bevordert de uitwisselbaarheid van tekstuele invoer en uitvoer via webpagina’s.Bepaalde karakters die via formulieren op een pagina worden ingevoerd, moeten door de webserver worden begrepen, om deze karakters op een andere pagina te kunnen tonen. Zie ook Speciale karakters, formulieren en databases.
  • Het specificeren van de karakterset bevordert de uitwisselbaarheid van tekstuele inhoud tussen websites.Wanneer een webserver inhoud opvraagt van een andere webserver, moet deze weten hoe bepaalde karakters moeten worden geïterpreteerd, om deze te integreren met de eigen inhoud.
  • Het specificeren van een karakterset is noodzakelijk voor pagina’s waarop verschillende karaktersets van toepassing zijn.Een pagina bevat bijvoorbeeld Westers en Arabisch schrift. De UTF-8 karakterset heeft een repertoire aan karakters die beide schriften ondersteunt.
  • (Online) validatiediensten die de HTML-code controleren, hebben baat bij de specificering van een karakterset.Zo kunnen zij ongeldige karakters in de code onderscheppen en melden.
  • Het specificeren vande karakterset is een vereiste voor HTML en XHTML documenten, volgens de W3C specificaties voor deze markup-talen.

“To promote interoperability, SGML requires that each application (including HTML) specify its document character set.”

5.1 The Document Character Set, W3C HTML4.01 Specificatie

Naar boven


Methodes voor het aangeven van de karakterset

De W3C HTML 4.01 specificatie schrijft voor dat browsers bij het lezen van webpagina’s geen aannames mogen maken over de karakterset van deze pagina’s. De karakterset van pagina’s moet aan browsers worden meegedeeld.

Dit kan volgens enkele mechanismen, waarvan de twee belangrijkste hier worden besproken. In volgorde van prioriteit:

  • Een HTTP-header van de webserver geeft de set aan, alvorens de pagina naar de browser te sturen.
  • Een meta element in het HTML document kan de browser vertellen welke karakterset moet worden gebruikt.

Karakterset aangeven via een HTTP Content-type header

De HTTP Content-type header kan gebruikt worden een karakterset aan te geven voor het door de server te versturen document. Meer informatie bij richtlijn 16.3:

  • R-pd.16.3: Specificeer de karakterset ook via HTTP headers, indien mogelijk.

Karakterset aangeven via een meta element

Ook kunnen webontwikkelaars de karakterset van een pagina aangeven met een een meta element in de HTML-broncode. Meer informatie bij richtlijn 16.4:

  • R-pd.16.4: Gebruik (minstens) het meta element voor het specificeren van de karakterset en plaats dit element zo hoog mogelijk in de head sectie van de markup.

Naar boven


Karaktercodering en lettertypes

Een letter A in een in US-ASCII gecodeerd document is altijd referentiegetal 65, ongeacht het lettertype waarin dat karakter wordt weergegeven.

Webontwikkelaars moeten niet proberen speciale karakters op een webpagina te laten weergeven door de browser te vertellen (bijvoorbeeld met CSS) hoe een tekst eruit hoort te zien. Een karakter op een pagina dat eruitziet als een ander karakter is niet te lezen door zoek-spiders, schermleesprogramma’s en bezoekers die niet beschikken over deze lettertypes of ondersteuning voor CSS.

In de praktijk maken grafische webbrowsers gebruik van diverse lettertypes om karakters op een pagina weer te geven. Als een karakter niet beschikbaar is in het standaard lettertype, of het door de webontwikkeleaar aangegeven lettertype, kijkt de browser naar andere lettertypes. Browsers kunnen aan de karakterset snel zien met welk karakter ze te maken hebben.

Soms beschikt het besturingssysteem niet over lettertypes om een bepaalde tekst weer te geven. Dan kan het systeem de gebruiker verzoeken om installatie van speciale lettertypes, of de desbetreffende tekst weergeven in ‘blanco’ karakters. Hierover hoeven webontwikkelaars zich echter pas zorgen te maken wanneer ze Japanse, Chinese, Cyrillische of andere ‘exotische’ schriften op de pagina specificeren. Bij het gebruik van westerse schriften treden praktisch geen problemen op.

Naar boven


Speciale karakters, formulieren en databases

Invoer van inhoud via het web

Soms heeft een website de mogelijkheid om tekst via formulieren in te voeren en deze tekst op de site te tonen (bijvoorbeeld een web-based CMS (Content Management Systeem)). De meeste webontwikkelaars proberen incorrect weergegeven karakters achter de schermen om te zetten naar karakterreferenties. Dit potentieel omvangrijke karwei is niet nodig als de webontwikkelaar de volgende vuistregels hanteert:

  • Specificeer een geschikte karakterset voor de pagina waarop het formulier zich bevindt.
  • Specificeer dezelfde karakterset voor de pagina waarop de ingevoerde tekst wordt getoond.

Voor een zo breed mogelijk repertoire aan karakters dat de bezoeker via het formulier kan invoeren, specificeer de utf-8 karakterset.

Invoer van inhoud via speciale programma’s

Wanneer de webontwikkelaar of contentbeheerder rechtstreeks een tekst wijzigt in de database van een website, is de weergave van speciale karakters afhankelijk van het programma om de database te benaderen en het besturingssysteem. Regelmatig komen de standaard-karakterset van het besturingssysteem en het programma niet overeen met de set van de webpagina die de inhoud van de database toont. Daardoor worden speciale karakters foutief getoond. Invoer met de juiste karakterset is noodzakelijk; bijvoorbeeld via een web-based CMS dat deze karakterset ondersteunt.

Naar boven


Karakterreferenties

Naast het specificeren van een karakterset hebben webontwikkelaars nog een methode tot hun beschikking voor het aangeven van geaccentueerde karakters, punctuatietekens en symbolen: karakterreferenties (ook wel ‘character references’ of ‘character entities’ genoemd).

Karakterreferenties zijn codes in de HTML die verwijzen naar karakters in de ISO-10646/Unicode tabel (de Universal Character Set) – deze komt overeen met de utf-8 karakterset. Karakterreferenties zien er als volgt uit.

Voorbeeld van een karakterreferentie (HTML)

ë

Het voorbeeld toont een karakterreferentie naar het karakter e-umlaut (ë). Karakterreferenties komen voor in drie notaties: naam, decimale notatie en hexadecimale notatie. Naamnotaties zijn bedacht voor een aanzienlijke reeks aan karakters zodat webontwikkelaars ze gemakkelijk kunnen onthouden. De decimale en hexadecimale notaties geven echter toegang tot alle karakters, dus ook de karakters waarvoor geen naamnotatie bestaat.

Links en referenties

Beschikking over karakters binnen de utf-8 karakterset

De ISO-10646 karaktertabel komt overeen met de utf-8 karakterset. Karakters die men dus terugvindt in de utf-8 karakterset, zoals gekromde (typografische) aanhalingstekens, zijn ideaal te schrijven in de vorm van karakterreferenties. Niet alle browsers ondersteunen echter het volledige utf-8 karakterrepertoire. Daardoor zullen met karakterreferenties bepaalde karakters niet worden getoond. Deze problemen beperken zich in de praktijk slechts tot enkele speciale punctuatietekens.

Een opmerkelijk voordeel van karakterreferenties is dat ze gebruikt kunnen worden voor karakters in de utf-8 karakterset terwijl voor de pagina een andere karakterset is gespecificeerd. Zo kan een pagina iso-8859-1 gecodeerd zijn en kunnen er toch gekromde aanhalingstekens gebruikt worden; in de vorm van karakterreferenties.

Links en referenties

De meeste (online) bronnen beperken zich tot de meest gebruikte karakterreferenties die een naamnotering hebben. Het is echter mogelijk om via de numerieke notering het hele repertoire van de utf-8 karakterset te gebruiken. Zo komt bijvoorbeeld de referentie ɳ overeen met het Arabische karakter alef. Door de Unicode karaktertabellen (PDF) na te gaan, kan gemakkelijk worden bepaald welk getal voor een karakterreferentie moet worden gebruikt.

Beperkingen in de invoer en opslag van karakters

Webontwikkelaars kunnen bij het schrijven van speciale karakters in HTML-documenten tegen de volgende problemen aanlopen.

  • Een karakter dat men wil gebruiken is niet in te voeren via het toetsenbord. Toetscombinaties zijn niet toereikend voor het produceren van een bepaald karakter, of de webontwikkelaar kent deze toetscombinaties niet.
  • Het beoogde karakter wordt in de browser of in een ander programma niet correct getoond. Vaak is het programma niet in staat om het bestand in een iso-8859-1 of utf-8 karaktercodering te lezen of op te slaan (wat vereist is voor een correcte conversie van een dergelijk karakter)

Vanwege deze softwarematige beperkingen, is het prettig voor webontwikkelaars om voor het produceren van speciale karakters karakterreferenties te gebruiken. Deze leveren niet de genoemde problemen op.

Het ampersand symbool in URLs

Het ampersand symbool (&) wordt gebruikt om een karakterreferentie aan te geven. Om browsers niet in verwarring te brengen wanneer het symbool in een tekst gebruikt wordt (bijvoorbeeld ‘C&A’), moet dit symbool zelf altijd omgezet worden tot een karakterreferentie: &

Regelmatig komen er URL’s voor in de HTML broncode van de pagina waarin ampersands gebruikt worden (voor Query strings). Deze moeten ook worden omgezet naar karakterreferenties.

Tenzij een browser een webpagina interpreteert als XML (XHTML in combinatie met het MIME type application/xhtml+xml. Zie ook Ondersteuning van XHTML en de complicaties), zullen ongecodeerde ampersands in de HTML zelden problemen opleveren.

Webontwikkelaars moeten er echter wel rekening mee houden dat het gebruik van XML gangbaarder wordt, vooral voor de uitwisseling van informatie tussen webservers. Geldige, correct geformuleerde markup voorkomt problemen met deze uitwisselbaarheid.

Server-side scripts, zoals PHP en ASP, produceren vaak URL’s met ampersands die niet zijn omgezet. Dit is te wijzigen in het configuratiebestand voor de scripttaal. Daarnaast zijn er verschillende commando’s voor het omzetten naar correcte URL’s, zoals de urlencode functie in PHP.

Links en referenties

Naar boven