Character-Encodings

Deze site geeft goede uitleg over character encodings.

Er zijn maar liefst 4 zaken die van invloed kunnen zijn op de karakterset die je voorgeschoteld krijgt. Dat zijn in willekeurige volgorde:

  1. De BOM
  2. Het Html meta-tag bijv. <meta charset="utf-8" />
  3. De http-header die informatie verstuurt omtrent de inhoud: bijvoorbeeld in PHP:
    header('Content-Type: text/html; charset=utf-8');
  4. De browser

Wie is de baas?

Het is uiteindelijk de browser die het laatste woord heeft m.b.t. de karakterset. Doorgaans staat deze op 'auto'. Dat wil zeggen dat de gebruiker geen voorkeur heeft ingesteld en de browser dus gewoon weergeeft wat hij aangeboden krijgt.

Sinds medio 2012 schijnt het officieel de Byte Order Mark (kortweg BOM) te zijn die na de browser het meest bepalend is. Dat is een code van twee of drie bytes die helemaal voorin een file staan en die aangeeft met welke codering je te maken hebt. Als je dit ziet:  dan is dat een BOM die door de editor niet als zodanig herkend wordt. Soms zie je in de html van een pagina losse aanhalingstekens gevolgd door en lege regel en daarna weer aahalingstekens. Zie hier. In dat geval is er waarschijnlijk een file ge-include die een BOM bevatte. Alleen de BOM die helemaal aan het begin van een html-bestand staat, heeft invloed. Mijn advies is: Vergeet die BOM en gebruik hem nooit. Zorg dat je bestanden zonder BOM worden opgeslagen.

Het volgende element dat van invloed kan zijn op de karaktercodering is de http-header en in de allerlaatste plaats is dat het html meta-tag. Deze is eigenlijk alleen toegevoegd voor als men de pagina heeft opgeslagen en deze off-line in een browser wil bekijken. Dan heb je natuurlijk niet die http-header. Het is een vreemde gang van zake want je zou verwachten dat hetgeen het laatst komt het voorgaande overruled. Zo is het dus niet, die meta-tag heeft eigenlijk vrijwel niets te vertellen.

Tot slot: utf-8 is tegenwoordig de standaard. Zoals www.w3schools.com het zegt: The default character encoding in HTML5 is UTF-8. Voor html4 was dat ISO-8859-1. Utf-8 voldoet altijd en dus er is geen reden om er van af te wijken. Om bestanden te converteren kan je het kladblok gebruiken. Deze heeft wel als gekke eigenschap dat hij een BOM gebruikt. Zie ook Bush hid the facts. Heel fijn als conversieprogramma is Crimson Editor. Hiermee kan je utf-8 ook zonder BOM opslaan. Vervelend van Crimson is dat je nergens je voorkeur kunt aangeven voor utf-8 als default. Je moet er dus altijd aan denken dat het goede encodingtype geselecteerd is. Als je dit vergeet maakt hij er weer ascii van en als je voor 'reload' kiest dan ben je al je wijzigingen kwijt.