Tuple Logo
utf-8

SHARE

UTF-8

Wat is UTF-8?

UTF-8 is een tekencodering die wordt gebruikt om tekst digitaal op te slaan en uit te wisselen. Het is een standaard die compatibel is met Unicode en kan vrijwel alle geschreven tekens van de wereld representeren. Dankzij de efficiënte opslag en brede adoptie is het de meest gebruikte codering op internet en softwaretoepassingen.

UTF-8 is ontworpen als een variabelelengte encodering, wat betekent dat sommige tekens minder bytes innemen dan andere. Hierdoor is het compatibel met oudere systemen die ASCII ondersteunen, terwijl het tegelijkertijd een breed scala aan speciale en internationale tekens kan bevatten.

Waarom is UTF-8 belangrijk?

De opkomst van Unicode en UTF-8 heeft ervoor gezorgd dat software en websites wereldwijd toegankelijker zijn. Zonder een universele codering zoals UTF-8 zouden systemen problemen ondervinden bij het correct weergeven van verschillende talen en symbolen.

Enkele redenen waarom UTF-8 de voorkeurskeuze is voor tekstcodering:

De relatie tussen UTF-8 en Unicode

Unicode is een standaard die unieke numerieke waarden (codepoints) toewijst aan tekens uit verschillende talen en symbolensets. UTF-8 is een manier om deze codepoints op te slaan in een computervriendelijk formaat.

Bijvoorbeeld:

Dit maakt UTF-8 een flexibele en schaalbare oplossing voor moderne software en webontwikkeling.

Geschiedenis van UTF-8

UTF-8 werd in 1992 ontwikkeld door Ken Thompson en Rob Pike, twee ingenieurs bij Bell Labs. Ze ontwierpen deze tekencodering als een efficiëntere manier om Unicode-tekens op te slaan en te verwerken, met een focus op compatibiliteit met ASCII en ruimtebesparing.

Het oorspronkelijke idee was om een variabele-lengte codering te maken die:

In 1993 werd UTF-8 opgenomen in de Unicode 2.0-standaard, en in 1996 werd het verder verfijnd in RFC 2044. Later, in 2003, werd het definitief gespecificeerd in RFC 3629, waarin de geldige tekens binnen Unicode werden beperkt tot 0 tot en met 0x10FFFF (de eerste 1.114.112 tekens van Unicode).

Waarom was UTF-8 nodig?

Voor de komst van Unicode en UTF-8 waren er veel verschillende tekencoderingen zoals ISO 8859-1 (Latin-1), Shift-JIS, en Windows-1252. Dit veroorzaakte grote compatibiliteitsproblemen bij internationale communicatie en bestandsuitwisseling.

Problemen met oudere coderingen:

  1. Beperkte karaktersets – Elke codering kon slechts een beperkt aantal talen ondersteunen.

  2. Incompatibiliteit tussen systemen – Een tekstbestand gecodeerd in Windows-1252 kon onleesbaar zijn op een systeem dat ISO 8859-1 gebruikte.

  3. Verschillende byte-lengtes – Sommige coderingen gebruikten vaste lengte-bytecoderingen, wat inefficiënt was voor talen met veel verschillende symbolen.

Unicode bood een oplossing door één universele karakterset te introduceren. Echter, de eerste Unicode-encoderingen zoals UTF-16 en UTF-32 gebruikten 2 of 4 bytes per karakter, wat inefficiënt was voor Engelstalige en andere Latijns-gebaseerde teksten.

Hoe heeft UTF-8 zich ontwikkeld?

Sinds de introductie heeft UTF-8 zich snel verspreid en is het uitgegroeid tot de dominante tekencodering op internet en in softwaretoepassingen.

Belangrijke ontwikkelingen:

Dankzij de brede ondersteuning en efficiëntie is UTF-8 de meest gebruikte tekencodering ter wereld.

Hoe werkt UTF-8?

UTF-8 is een variabele-lengte tekencodering, wat betekent dat sommige tekens minder bytes nodig hebben dan andere. Dit zorgt ervoor dat de codering efficiënt is en tegelijkertijd compatibel met ASCII blijft.

Het basisprincipe van variabele lengte-encodering

Elke Unicode-codepoint wordt in UTF-8 opgeslagen als een reeks één tot vier bytes.

Hier is een overzicht van hoe tekens worden opgeslagen in UTF-8:

Dit betekent dat veelgebruikte tekens zoals letters en cijfers weinig opslagruimte innemen, terwijl zeldzame symbolen of niet-Latijnse karakters meer bytes nodig hebben.

Voorbeelden van UTF-8-codering

Laten we enkele Unicode-tekens bekijken en zien hoe ze in UTF-8 worden opgeslagen:

Zoals je kunt zien, gebruikt de letter A slechts 1 byte, het euroteken 3 bytes en een emoji zoals 😀 gebruikt 4 bytes.

ASCII-compatibiliteit van UTF-8

Een belangrijk voordeel van UTF-8 is dat ASCII-tekens exact hetzelfde blijven. Dit betekent dat een bestand met alleen ASCII-tekens in UTF-8 precies hetzelfde wordt gelezen door oudere systemen die alleen ASCII begrijpen.

Bijvoorbeeld, de ASCII-string:

Hello

wordt in UTF-8 exact hetzelfde opgeslagen als in ASCII:

0x48 0x65 0x6C 0x6C 0x6F

Maar als je een Unicode-karakter toevoegt, zoals een é (U+00E9), zal de codering veranderen naar:

0x48 0x65 0x6C 0x6C 0xC3 0xA9

Hier zie je dat é als 2 bytes (0xC3 0xA9) wordt opgeslagen, terwijl de rest ongewijzigd blijft.

Overlong encodings

Overlong encodings zijn foutieve UTF-8-representaties van tekens die onnodig veel bytes gebruiken.

Bijvoorbeeld, het ASCII-teken A kan correct worden gecodeerd als 0x41 (1 byte). Maar in een overlong encoding kan hetzelfde teken worden opgeslagen als 11000000 10000001 (2 bytes), wat onnodig en onveilig is.

Waarom zijn overlong encodings een probleem?

Foutafhandeling in UTF-8

Wat gebeurt er als een applicatie een ongeldige UTF-8-byte tegenkomt?

Er zijn drie mogelijke benaderingen:

  1. Fout negeren – De corrupte byte wordt overgeslagen.

  2. Vervangen met een standaardteken – Vaak wordt het "replacement character" � (U+FFFD) gebruikt.

  3. Foutmelding geven – Sommige systemen weigeren de invoer volledig.

Voorbeeld:
Als een byte ontbreekt in een 2-byte karakter, kan de software dit vervangen met �, om aan te geven dat de tekst beschadigd is.

Surrogates en Byte Order Mark (BOM)

Surrogates zijn speciale codepoints die in UTF-16 worden gebruikt om tekens buiten het basisplan te coderen. Maar in UTF-8 zijn surrogates ongeldig en mogen ze niet worden gebruikt.

Byte Order Mark (BOM) is een optionele marker (U+FEFF) die sommige systemen aan het begin van een bestand plaatsen om te laten weten dat de inhoud in UTF-8 is gecodeerd.

Verschil tussen UTF-8 en andere encoderingen

Er zijn verschillende tekencoderingen beschikbaar, maar UTF-8 heeft de standaard gezet vanwege zijn flexibiliteit en brede ondersteuning. Toch worden ook andere encoderingen zoals UTF-16 en UTF-32 nog gebruikt in specifieke situaties. Laten we de belangrijkste verschillen bekijken.

UTF-8 vs. UTF-16 vs. UTF-32

Wanneer gebruik je welke codering?

Vergelijking met oudere encoderingen zoals ISO 8859-1 en Windows-1252

Voor Unicode populair werd, gebruikten veel computers en systemen locale-specifieke encoderingen, zoals ISO 8859-1 (Latin-1) en Windows-1252.

Waarom is UTF-8 beter dan oudere encoderingen?

Voordelen van UTF-8

UTF-8 heeft zich ontwikkeld tot de meest gebruikte tekencodering ter wereld, vooral dankzij de veelzijdigheid en efficiëntie. Hier zijn de belangrijkste voordelen van UTF-8:

Universele compatibiliteit

UTF-8 ondersteunt alle Unicode-tekens, wat betekent dat het gebruikt kan worden voor elk schrift ter wereld. Dit maakt het ideaal voor internationale communicatie, websites en software.

Compatibiliteit met ASCII

Een van de grootste voordelen van UTF-8 is dat alle ASCII-tekens (0-127) exact hetzelfde blijven. Dit betekent dat:

Bijvoorbeeld, de string:

Hello

is in zowel ASCII als UTF-8 exact hetzelfde opgeslagen:

0x48 0x65 0x6C 0x6C 0x6F 

Dit voorkomt compatibiliteitsproblemen met oudere systemen.

Efficiënte opslag en verwerking

Omdat UTF-8 een variabele lengte gebruikt, neemt het minder ruimte in voor veelgebruikte tekens dan andere Unicode-encoderingen zoals UTF-16 of UTF-32.

Vergelijking van opslaggrootte:

Standaardcodering op het web

Volgens W3Techs wordt meer dan 95% van alle websites vandaag de dag gecodeerd in UTF-8. Dit komt doordat:

Ondersteuning in databases en programmeertalen

De meeste databases en programmeertalen ondersteunen UTF-8 standaard:

Door de brede ondersteuning is UTF-8 de veiligste keuze voor tekstopslag en gegevensuitwisseling.

Nadelen van UTF-8

Hoewel UTF-8 de standaard is geworden voor tekencodering, heeft het ook enkele nadelen, vooral in specifieke situaties. Hier zijn de belangrijkste beperkingen:

Hogere opslagruimte voor bepaalde tekens

Hoewel UTF-8 efficiënt is voor ASCII-tekens (1 byte per teken), kunnen sommige Unicode-tekens meer ruimte innemen.

Vergelijking van tekens in UTF-8 vs. andere encoderingen:

Complexiteit bij verwerking

Omdat tekens variabele lengte hebben (1 tot 4 bytes), kan het lastiger zijn om met UTF-8-gecodeerde tekst te werken in programmeertalen en databases.

Voorbeelden van complicaties:

Problemen met oudere systemen

Hoewel UTF-8 de standaard is in moderne systemen, kunnen oude programma’s en apparaten nog steeds ISO 8859-1 of Windows-1252 verwachten. Dit kan leiden tot:

Overhead bij binair georiënteerde formaten

Sommige binair georiënteerde protocollen werken minder goed met UTF-8. Bijvoorbeeld:

Geen vaste byte-grootte per teken

In tegenstelling tot UTF-32, waar elk teken altijd 4 bytes is, varieert de grootte in UTF-8. Dit kan leiden tot:

Nadelen wegen niet op tegen de voordelen

Voor de meeste toepassingen is UTF-8 de beste keuze. Andere encoderingen zoals UTF-16 en UTF-32 worden alleen gebruikt in zeer specifieke gevallen.

Gebruik van UTF-8 in de praktijk

UTF-8 wordt in vrijwel alle moderne technologieën gebruikt. Van websites en databases tot programmeertalen en besturingssystemen, UTF-8 is de standaardcodering vanwege zijn flexibiliteit en brede ondersteuning. Hier zijn enkele van de belangrijkste toepassingen.

Gebruik van UTF-8 in webontwikkeling

Het web draait op UTF-8. HTML-, CSS- en JavaScript-bestanden zijn standaard UTF-8-gecodeerd, en moderne browsers verwachten deze codering.

Hoe stel je UTF-8 in HTML in?

Om ervoor te zorgen dat een webpagina correct UTF-8 gebruikt, voeg je de volgende meta-tag toe in de <head>-sectie van je HTML-document:

<meta charset="UTF-8">

Hierdoor worden tekens correct weergegeven, ongeacht de taal.

Waarom is dit belangrijk?

Gebruik van UTF-8 in databases

Moderne databases zoals MySQL, PostgreSQL en SQLite ondersteunen UTF-8 als standaard.

Waarom is UTF-8 belangrijk in databases?

MySQL configureren voor UTF-8

Bij het aanmaken van een database of tabel in MySQL kun je UTF-8 als standaard instellen:

CREATE DATABASE mijn_database CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Waarom utf8mb4 en niet utf8?

MySQL’s oudere utf8-implementatie ondersteunt geen 4-byte Unicode-tekens zoals emoji’s (😀). Gebruik altijd utf8mb4 voor volledige Unicode-ondersteuning.

Gebruik van UTF-8 in programmeertalen

De meeste moderne programmeertalen ondersteunen UTF-8 als standaard.

Voorbeeld: UTF-8 strings in Python

tekst = "Hallo, wereld! 🌍"
print(tekst.encode("utf-8"))  # Output: b'Hallo, wereld! \xf0\x9f\x8c\x8d'

Hier wordt de Unicode-emoji 🌍 correct omgezet naar UTF-8 bytes.

Gebruik van UTF-8 in besturingssystemen

Besturingssystemen zoals Windows, macOS en Linux ondersteunen UTF-8 voor bestandsnamen, terminalweergave en applicaties.

Windows en UTF-8

Oudere Windows-systemen gebruikten Windows-1252 of UTF-16, maar moderne versies ondersteunen UTF-8 volledig in cmd en PowerShell.

Om UTF-8 te activeren in Windows-terminal:

chcp 65001

Dit schakelt de terminal om naar UTF-8-modus, waardoor speciale tekens correct worden weergegeven.

Gebruik van UTF-8 in API’s en data-uitwisseling

Bijna alle moderne API’s, JSON-bestanden en XML-bestanden maken gebruik van UTF-8 als standaardcodering.

Voorbeeld: JSON met UTF-8

{
    "naam": "Jörg Müller",
    "stad": "München",
    "emoji": "😀"
}

JSON is altijd UTF-8, waardoor het eenvoudig is om data wereldwijd uit te wisselen zonder tekencorruptie.

UTF-8 is overal

UTF-8 is de meest veelzijdige en efficiënte codering voor moderne technologieën en blijft de beste keuze voor elke toepassing.

Standaarden en ondersteuning van UTF-8

UTF-8 is niet zomaar populair geworden; het is een officieel erkende en breed ondersteunde standaard binnen verschillende industrieën. Van internationale organisaties tot programmeertalen en besturingssystemen, UTF-8 wordt vrijwel overal toegepast.

Standaarden en specificaties

UTF-8 is officieel vastgelegd in meerdere standaarden en specificaties.

Deze standaarden zorgen ervoor dat UTF-8 wereldwijd consistent wordt toegepast in software, hardware en netwerkprotocollen.

Ondersteuning in programmeertalen en frameworks

Vrijwel alle moderne programmeertalen ondersteunen UTF-8 direct of bieden native ondersteuning voor Unicode.

Veel frameworks zoals Django, React, Angular en Node.js hanteren UTF-8 standaard om compatibiliteit te garanderen.

Ondersteuning in databases

UTF-8 is de aanbevolen encoding voor tekst in databases, omdat het compatibel is met meerdere talen en voorkomt dat tekens verloren gaan.

Let op:

Ondersteuning in besturingssystemen

Besturingssystemen ondersteunen UTF-8 om bestandsnamen, tekstinvoer en applicaties correct te verwerken.

Windows-gebruikers moeten soms handmatig overschakelen naar UTF-8, bijvoorbeeld in de terminal met:

chcp 65001

Sinds Windows 10 wordt UTF-8 echter standaard beter ondersteund.

Ondersteuning in webbrowsers

Alle moderne webbrowsers ondersteunen UTF-8 en gebruiken het standaard voor webpagina's.

Webpagina’s zonder specifieke encoding-instelling worden door browsers meestal als UTF-8 geïnterpreteerd, wat aangeeft hoe universeel de standaard is.

Ondersteuning in netwerkprotocollen en bestanden

Veel netwerk- en bestandsformaten ondersteunen UTF-8 om wereldwijde compatibiliteit te garanderen.

Belangrijk voor ontwikkelaars:

UTF-8 is de wereldwijde standaard

UTF-8 is de meest gebruikte tekencodering ter wereld. Dankzij zijn flexibiliteit, efficiëntie en universele compatibiliteit is het de standaard geworden voor webontwikkeling, databases, programmeertalen en besturingssystemen.

Breedste ondersteuning: Programmeertalen, databases, besturingssystemen en netwerken ondersteunen allemaal UTF-8.
Wereldwijde compatibiliteit: Ondersteunt alle talen en symbolen zonder conversieproblemen.
Gestandaardiseerd door Unicode en W3C: UTF-8 is de aanbevolen codering voor het web en software.

Door de universele adoptie en efficiënte opslag blijft UTF-8 de beste keuze voor tekstverwerking, opslag en data-uitwisseling.

Veelgestelde vragen
Wat is UTF-8 codering?

UTF-8 is een tekencodering die alle Unicode-tekens kan opslaan met 1 tot 4 bytes per teken. Het is de standaardcodering voor het web en moderne software.


Wat is de UTF-8-code?

De UTF-8-code van een teken is de binaire of hexadecimale representatie ervan. Bijvoorbeeld, de A heeft de UTF-8-code 0x41, en € heeft 0xE2 0x82 0xAC.


Hoeveel UTF-8-tekens zijn er?

UTF-8 ondersteunt alle 1.114.112 Unicode-tekens (van U+0000 tot U+10FFFF), hoewel niet alle codepoints in gebruik zijn.


Wat zijn niet-UTF-8-tekens?

Alle tekens kunnen in UTF-8 worden gecodeerd, maar foutief gecodeerde tekens of oude encoderingen zoals Windows-1252 kunnen tot problemen leiden.


Ook interessant

Nieuwsgierig geworden?

Wij vertellen je graag meer!

Contact opnemen
Tuple Logo
Veenendaal (HQ)
De Smalle Zijde 3-05, 3903 LL Veenendaal
info@tuple.nl‭+31 318 24 01 64‬
Snel navigeren
Succesverhalen