# HTML/Character sets

Charset staat voor 'character set' in het engels. Bedoeld wordt de verzameling van alle tekens die in een document gebruikt kunnen worden. Het gaat om tekens zoals letters, cijfers, symbolen en karakters uit diverse talen. Een 'character set' hoeft niet alle tekens te bevatten. De meeste 'character sets' bevatten alleen de meest gebruikte tekens. Dit geldt niet voor de Unicode 'character set'. Unicode is speciaal ontworpen om alle tekens die op de wereld gebruikt worden, te bevatten. HTML gaat ervan uit dat de browser alle Unicode-tekens moet kunnen afbeelden.
'Charset' wordt bij HTML ook in de betekenis gebruikt van 'character encoding'. Het gaat hierbij om de manier waarop de tekens in de computer gecodeerd worden. Dit is noodzakelijk omdat een computer intern alleen met getallen werkt en niet met tekens. Zo wordt het euro-teken (€) in een bepaalde charset in de computer gecodeerd als 128 en in een andere charset als 164. In weer een andere charset bestaat dat teken niet eens. Hoewel de browser zelf Unicode gebruikt, hoeft de webpagina niet gecodeerd te worden als Unicode. De browser moet dan de webpagina vertalen van de ene codering naar Unicode codering. Dit vertalen is alleen mogelijk wanneer de browser weet volgens welke charset de webpagina gecodeerd is. Welke charset gebruikt mogen worden in webpagina's en hoe ze exact heten wordt bepaald door het IANA, een instituut dat dit soort zaken regelt op het internet.

## Coderen van de charset

De charset kan op twee plekken gecodeerd worden: op de webserver en in het html-document. Bij het openen van een webpagina kan de webserver charset informatie meesturen. Deze is voor de gebruiker onzichtbaar, maar de browser maakt er wel gebruik van. Hoe de charset op een webserver gecodeerd wordt, verschilt van webserver tot webserver. In de meeste webservers kan dat per file, per extensie of per directory gebeuren. Er kan ook een algemene standaard charset gecodeerd worden. Of een webserver charset informatie meestuurt, kun je controleren via http check websites (zoals ). Geef op voor welke URL je dit wilt weten en zoek vervolgens naar een regel met de termen Content-Type: en charset=. Als deze ontbreekt dan wordt er geen charset informatie meegestuurd.
De charset kan ook in het html-document opgenomen worden. Wanneer de charset op de webserver gecodeerd wordt, dan heeft de codering van de charset geen effect meer. Toch is het zinnig om wel een charset in het html-document op te nemen voor het geval de webpagina gedownload wordt en daarna als file in de browser geopend wordt. Want dan is er geen webserver meer die de charset kan bepalen.
Het coderen van de charset in html gaat als volgt: voeg direct na de '<head>'-tag een '<meta ....>'-tag in, bijvoorbeeld:
HTML 4.01-code: coderen van een charset
HTML 5-code: coderen van een charset in html5

## Welke charset

De regel welke charset gecodeerd moet worden is eenvoudig. De uitvoering is iets moeilijker. Gelukkig hoeft het coderen van een verkeerde charset niet altijd rampzalig te zijn. Het wordt pas een probleem wanneer er bijzondere tekens gebruikt worden, tekens die veelal niet op het toetsenbord staan, tekens zoals: à á â è é ë €.
Wanneer je het html-document in bepaald programma bewerkt en vervolgens opslaat dan zal het programma voor het opslaan een bepaalde charset gebruiken. De juiste charset is de charset die het programma gebruikt om het html-document op te slaan. Het probleem is dat het bij de meeste programma's niet duidelijk is met welke charset er opgeslagen wordt. Een vuistregel is dat bij de meeste Nederlandse Windows-programma's wordt charset Windows-1252 gebruikt wordt en bij de meeste Nederlandse Unix/Linux-programma's charset ISO-8859-1. Sommige geavanceerde programma's geven de mogelijkheid om te kiezen welke charset gebruikt wordt. In dat geval kun je kiezen welke charset de webpagina moet gebruiken.
Of de juiste charset gebruikt wordt kun je controleren door tekens zoals à á â è é ë € in de html-code te kopieren en plakken. Sluit het html-document en open het document opnieuw. Open het document ook via een browser vanaf de website. De tekens moeten zowel in de editor als in de browser identiek zijn.

## HTML Entities

Wanneer een bepaalde charset een bepaalde teken niet kan weergeven, kan er ook gebruik gemaakt worden van zogenaamde HTML Entities. Met een bepaalde tekenreeks wordt een bepaald teken gecodeerd. Zo staat &euro; voor het euro-teken (€). En &lt; en &gt; staan voor '<' en '>'. Deze laatste twee zijn belangrijk omdat de '<' en de '>' normaal een html-tag aangeeft en niet zomaar als tekst gebruikt mag worden.
De tekens kunnen ook met een getal of een hexadecimaal getal aangegeven worden. In Unicode heeft elk teken een getal toegewezen gekregen. Dit getal moet dan gebruikt worden. Zo kan het euro-teken (€) ook als &#8364; of als &#x20AC; aangegeven worden.

## Belangrijke charsets

* ISO-8859-1 is een charset die heel veel gebruikt wordt voor West-Europese talen. Het bevat de letters 'a' t/m 'z', de cijfers en diverse symbolen. Het bevat ook letters met accenten zoals: à á â è é ë. Het bevat geen euroteken (€).
* ISO-8859-15 is een aanpassing op de voorgaande charset. Enkele minder gebruikt symbolen zijn vervangen door veel gevraagde symbolen. Het bevat wel het euroteken (€).
* Windows-1252 is gebaseerd op de ISO-8859-1 en is uitgebreid met veel gevraagde symbolen zoals het euroteken (€).
* Shift_JIS is een voorbeeld van een veel gebruikte Japanse charset met tekens zoals 日本語. Zo zijn er voor vele talen aparte charsets ontwikkeld.
* UTF-8 is een zogenaamde Unicode-charset. Met de Unicode-charset kan vrijwel elk symbool van elke taal op de wereld geproduceerd worden. Op dit moment zijn bijna honderdduizend tekens gedefinieerd. Er zijn ook andere Unicode charsets zoals UTF-16 en UTF-32 maar deze worden in HTML vrijwel nooit gebruikt.

## Meer informatie

* De HTML 4.01 standaard m.b.t. Character sets
* IANA, Overzicht met de officiele namen van toegestane charsets (Engels)
* ISO-8859-1, ISO-8859-15 en Windows-1252
* UTF-8
* Overzicht met Unicode tekens
* Overzicht van HTML Entities
* Speciale karakters encoderen en decoderen