Wat is UTF-8: definitie, werking, fouten en toepassingen

Laatste update: 25 augustus 2025
  • UTF-8 codeert Unicode-punten in 1 tot 4 bytes, is compatibel met ASCII en geldig voor elke taal.
  • Zelfsynchronisatie en validatie: De patronen 0/110/1110/11110 voorkomen overlappingen en maken het gemakkelijker om fouten te detecteren.
  • Web en systemen: meta-tekenset, uitgebreide ondersteuning en eenvoudige conversie op Windows/macOS/Linux.

UTF-8 en Unicode-codering

Als je dit artikel vandaag leest zonder vreemde symbolen te zien, is dat te danken aan UTF-8 . Deze codering zorgt ervoor dat letters, accenten, technische symbolen en zelfs emoji's op dezelfde manier worden weergegeven in elke moderne browser, elk besturingssysteem en elke e-mailclient. Het is de meest gebruikte standaard op het web en de basis van digitale communicatie zoals we die kennen.

Wanneer een apparaat tekst weergeeft, verwerkt het in feite getallen . Deze getallen zijn codepunten die zijn gedefinieerd door de Unicode-standaard . Om ze om te zetten in bytes die over een netwerk worden verzonden of in een bestand worden opgeslagen, voeren we een transformatie uit: UTF-8 . In de volgende alinea's leest u wat UTF-8 is, hoe het werkt, waarom het de standaard is geworden, wat de voordelen en beperkingen ervan zijn en hoe u veelvoorkomende fouten kunt voorkomen.

Wat is UTF-8?

UTF-8 (8-bit Unicode Transformation Format) is een manier om Unicode-codepunten om te zetten in byte-reeksen . Het belangrijkste kenmerk is het gebruik van variabele lengte : sommige tekens nemen 1 byte in beslag, terwijl andere 2, 3 of 4 bytes vereisen. Dit maakt compacte teksten met eenvoudige Latijnse tekens mogelijk , maar het kan ook elk teken uit het Unicode-repertoire weergeven.

Het is volledig compatibel met ASCII : de eerste 128 tekens (U+0000 tot U+007F) zijn gecodeerd met één byte die identiek is aan de 7-bits ASCII. Dit vergemakkelijkte de overgang van oudere systemen en verklaart grotendeels het succes ervan op internet, in e-mail en in IETF-protocollen.

UTF-8 onderscheidt zich door zijn robuustheid : het bevat synchronisatiebits die een betrouwbare identificatie van het begin van elk symbool mogelijk maken. Deze zelfsynchroniserende eigenschap maakt het gemakkelijk om te detecteren of een reeks "lijkt" op UTF-8 , wat erg handig is in tools en parsers.

Unicode: de basis van alles

Unicode is de universele standaard die aan elk teken een uniek nummer toewijst , ongeacht taal, platform of toepassing. Dit nummer wordt een codepunt genoemd en wordt meestal in hexadecimale vorm weergegeven in het formaat U+XXXX (of meer cijfers indien nodig).

Bv De hoofdletter “A” is U+0041In HTML kunnen we er ook naar verwijzen als A. Uw computer "denkt" aan A niet als een letter, maar als het getal 65, en vervolgens bepaalt de codering (bijvoorbeeld UTF-8) hoe dat getal in bytes moet worden weergegeven.

Als je wilt zien hoe Unicode wordt vertaald naar tekens op je pc , kun je in Windows de Alt-toets ingedrukt houden en de decimale numerieke code op het numerieke toetsenbord typen: bijvoorbeeld Alt+65 geeft "A" terug (zie de volledige lijst met Alt-codes ). Het is een klassieke sneltoets die laat zien hoe de codes ten grondslag liggen aan de tekens die je ziet.

Een stukje geschiedenis: hoe UTF-8 ontstond

UTF-8 werd op 2 september 1992 bedacht door Ken Thompson onder leiding van Rob Pike. Ze implementeerden het in het Plan 9-besturingssysteem van Bell Labs en presenteerden het officieel op USENIX (San Diego, januari 1993) . Tijdens de standaardisatie, gesponsord door de X/Open Joint Internationalization Group (XOJIG) , stond het bekend onder namen als FSS/UTF en UTF-2 voordat het werd samengevoegd tot UTF-8.

Het ontwerp loste praktische problemen op die eerdere pogingen tot universele codering parten speelden: ASCII-compatibiliteit, zelfsynchronisatie, geen overlappende bytes en eenvoudige foutdetectie. Deze balans maakte het tot de de facto standaard van het web.

  Soorten pc-poorten: wat ze zijn, waar ze voor dienen en hoe u ze kiest

Hoe UTF-8 onder de motorkap werkt

UTF-8 groepeert tekens op basis van het aantal bytes dat nodig is om ze te coderen . Het aantal bytes hangt uitsluitend af van het Unicode-codepunt en volgt bitpatronen die de lengte van de reeks aangeven.

  • 1 byte (U+0000 tot U+007F): ASCII-tekens. Formaat: 0xxxxxxxDe meest significante bit is 0, wat garandeert directe compatibiliteit met ASCII.
  • 2 bytes (U+0080 tot U+07FF): Formaat 110yyyyy 10xxxxxx. Het wordt gebruikt voor de meeste Europese alfabetten met diakritische tekens en andere alfabetten, zoals het Grieks, Cyrillisch, Hebreeuws en Arabisch..
  • 3 bytes (U+0800 tot U+FFFF): Formaat 1110zzzz 10yyyyyy 10xxxxxx. Inclusief het meertalige basisplan (BMP), met CJK (Chinees, Japans, Koreaans), technische symbolen en meest gebruikte tekens.
  • 4 bytes (U+10000 tot U+10FFFF): Formaat 11110uuu 10uuzzzz 10yyyyyy 10xxxxxx. Vertegenwoordigt de aanvullende vlakken: geavanceerde wiskundige symbolen, historische geschriften, minder gebruikelijke ideografische symbolen, etc.

De sleutel tot zelfsynchronisatie ligt in de headerbits : 0 voor ASCII; 110 voor twee bytes; 1110 voor drie; 11110 voor vier. Vervolgbytes beginnen altijd met 10. Dankzij dit principe kan een vervolgbyte nooit als startbyte verschijnen en kan een geldige reeks nooit een substring zijn van een langere reeks (non-overlap principe).

Equivalentie met UTF-16 en surrogaatparen

UTF-16 vertegenwoordigt BMP-codepunten met een eenheid van 16 bits en punten boven U+FFFF met vervangende paren in het bereik D800–DFFF. In plaats daarvan, UTF-8 codeert altijd echte codepunten, geen UTF-16-eenheden, waardoor verwarring met vervangers wordt voorkomen.

Historisch gezien stonden sommige concepten 5 of 6 bytes in UTF-8 toe om een ​​breder bereik te bestrijken, maar Unicode en RFC 3629 beperken UTF-8 tot maximaal 4 bytes . ISO/IEC heeft bredere opties overwogen, maar deze maken geen deel uit van de huidige standaard.

Praktisch voorbeeld: de ñ

Het teken “ñ” heeft code punt U+00F1, dat binnen het bereik van twee bytes valt. Volgens het patroon wordt het gecodeerd als 110xxxxx 10xxxxxx. De UTF-8-weergave is 0xC3 0xB1Decoderen is het omgekeerde proces: de bruikbare bits worden gelezen en het oorspronkelijke code punt wordt gereconstrueerd.

Voordelen en beperkingen van UTF-8

Belangrijkste voordelen :

  • ASCII-ondersteuning: ASCII-teksten zijn geldig in UTF-8 zonder wijzigingen.
  • Universeel: kan elk Unicode-teken voorstellen, inclusief technische symbolen en emoji's.
  • Efficiëntie in Latijnse teksten: bij gebruik van 1 byte voor ASCII, bespaart ruimte in vergelijking met UTF-16 in veel westerse talen.
  • Zelfsynchronisatie en detectie: bitpatronen maken het mogelijk karakterbegin detecteren en sequenties eenvoudig valideren.

Beperkingen en afwegingen :

  • CJK-teksten nemen meer ruimte in beslag dan UTF-16-teksten, waarbij veel van die tekens in 2 vaste bytes passen.
  • Berekeningskosten: omdat de lengte variabel is, kunnen sommige bewerkingen (bijvoorbeeld “ga naar teken n”) vereisen dat je vanaf het begin doorgaaten bepaalde taken kunnen sneller zijn in UTF-16/UTF-32.

BOM (Byte Order Mark) in UTF-8

UTF-8 heeft geen BOM nodig omdat de bytevolgorde de betekenis van de waarden niet verandert (de kleinste eenheid is de byte). Toch, Er is een optionele BOM, het teken U+FEFF gecodeerd als EF BB BF aan het begin van een bestand of stream, wat kan worden gebruikt om aan te geven dat het om Unicode/UTF-8 gaat.

  Complete handleiding voor het installeren van Home Assistant op een Raspberry Pi.

Aanbevolen werkwijzen : Als het aan het begin verschijnt, accepteren sommige systemen het, terwijl andere het letterlijk interpreteren. Bij concatenaties is het raadzaam om tussenliggende BOM's te verwijderen . Het opnemen ervan is niet verplicht en de bruikbaarheid ervan in UTF-8 is beperkt in vergelijking met UTF-16/UTF-32, waar het wel de endianness aangeeft.

Typische codeerfouten en hoe ermee om te gaan

Een robuuste UTF-8-decoder moet ofwel onjuist gevormde sequenties afwijzen , ofwel vervangen door U+FFFD (REPLACEMENT CHARACTER), ofwel een foutmelding geven. De meest voorkomende fouten zijn:

  • Afgeknotte sequenties: een multibyte inleidende byte zonder voldoende voortzettingen.
  • Losse voortzettingsbytes: verschijnen 10xxxxxx zonder een geldige leadbyte.
  • Overlengtes: codering met meer bytes dan nodig; bijvoorbeeld, proberen een ASCII te coderen met 2 bytes (0xC0 y 0xC1 zijn ongeldig).
  • Verboden lengtes: begint met het voorstellen van 5 of 6 bytes (0xF8-0xFD zijn niet geldig in standaard UTF-8).
  • Waarden buiten het Unicode-bereik: niet ondersteund boven U+10FFFF; bepaalde waarden (0xF5-0xF7 (als begin) zijn ongeldig.
  • UTF-16 surrogaatparen: D800–DFFF zijn geen geldige code punten in Unicode; ze mogen niet in UTF-8 gecodeerd worden weergegeven.

Als je het teken “�” op het scherm ziet , komt dat hoogstwaarschijnlijk door een coderingsfout of doordat het bestand in een andere codering is opgeslagen. De oplossing is om end-to-end UTF-8-codering af te dwingen (bestand, server, database, HTTP-headers).

UTF-8 op het web en in e-mail

Een HTML-pagina hoeft slechts één codering te declareren . De aanbevolen codering, voor compatibiliteit en om een ​​breed bereik te garanderen, is UTF-8. Voeg de volgende meta-tag zo snel mogelijk toe aan de header:

<meta charset="UTF-8">

Plaats het aan het begin van de `<head>`-tag , zodat de browser het leest voordat het document wordt verwerkt. Dit voorkomt inconsistenties en "gebroken" tekens. De acceptatie van UTF-8 op het web is overweldigend ; het wordt gebruikt door de overgrote meerderheid van de huidige websites.

In e-mail wordt UTF-8 breed ondersteund en aanbevolen door organisaties zoals het Internet Mail Consortium. Het configureren van e-mailclients voor het gebruik van UTF-8 vermindert problemen bij het uitwisselen van berichten met mensen die andere talen spreken.

UTF-8, UTF-16 en UTF-32: wat is het verschil?

UTF-8 : Variabele lengtecodering in eenheden van 8 bits; ideaal voor het web , zeer efficiënt met ASCII en westerse talen. Uitstekende compatibiliteit en foutdetectie.

UTF-16 : variabele lengte in eenheden van 16 bits; gebruikt surrogaatparen voor U+10000 en hoger. Het is vaak voordelig wanneer niet-ASCII-tekens overheersen en wordt gebruikt in veel API's en platforms (Windows draait bijvoorbeeld van nature in UTF-16 ).

UTF-32 : vaste lengte van 32 bits per teken; zeer eenvoudig te indexeren , maar neemt veel ruimte in beslag. Het wordt gebruikt in gevallen waarin de grootte minder belangrijk is dan de verwerkingsgemak.

Incompatibele varianten: CESU-8 en “Modified UTF-8”

CESU-8 codeert UTF-16-eenheden direct (inclusief surrogaatparen) in plaats van codepunten te coderen, waardoor het verschilt van standaard UTF-8 voor tekens boven U+FFFF. Sommige oudere platforms gebruikten het: Oracle 8 bood het aan onder de alias UTF-8, en vanaf Oracle 9 werd standaard UTF-8 toegevoegd onder een andere alias. Java en Tcl hebben CESU-8 in bepaalde contexten gebruikt .

Gewijzigde UTF-8 (bijvoorbeeld in Java-omgevingen) representeert het NUL-teken (U+0000) als 0xC0 0x80 in plaats van 0x00. Dit voorkomt de null-byte in C-strings , maar voldoet niet aan de UTF-8-standaard. Veel implementaties van deze "gewijzigde" versie voldoen ook aan CESU-8.

  Hoe kies je de beste pc-muis op basis van je daadwerkelijke gebruik?

UTF-8 op Windows en API's: codepagina's en conversie

Windows werkt intern in UTF-16 (WCHAR), maar sinds Windows 10 versie 1903 kun je UTF-8 forceren als de procescodepagina via het applicatiemanifest (eigenschap activeCodePage). Hierdoor kan oudere code die gebruikmaakt van “-A” API’s, gemakkelijker werken via UTF-8.

API's -A versus -W: de -A afhankelijk van de ANSI-codepagina geconfigureerd (kan CP_UTF8 zijn), terwijl de -W zij maken gebruik van UTF-16Om samen te werken, MultiByteToWideChar y WideCharToMultiByte kunt u converteren tussen UTF-8 en UTF-16; toepassingen CP_UTF8 en, indien van toepassing, MB_ERR_INVALID_CHARS om invoerfouten te detecteren.

Echte compatibiliteit: browsers en systemen

UTF-8 is compatibel met moderne browsers (Chrome, Firefox, Safari, Edge, Opera en recente versies van Internet Explorer) en de meeste besturingssystemen (Windows, Linux, macOS, Android, iOS). Tenzij u zeer oude software gebruikt, zou u geen problemen moeten ondervinden.

Hoe bestanden naar UTF-8 converteren

In Windows (Kladblok) : open het bestand, ga naar "Bestand > Opslaan als…" en kies bij "Codering" UTF-8 . Sla het bestand op met een nieuwe naam als je het origineel wilt behouden.

In macOS (TextEdit) : Ga naar “TextEdit > Voorkeuren > Openen en opslaan” en selecteer Unicode (UTF-8) bij het opslaan. Exporteer het bestand vervolgens met deze optie ingeschakeld.

Op Linux: met de terminal kunt u gebruiken iconv. Bijvoorbeeld: iconv -f <codificación_origen> -t UTF-8 <entrada> -o <salida>. Controleer later dat de applicatie die het gebruikt ook UTF-8 verwacht.

Hoe kun je zien of een bestand in UTF-8 is geschreven? Veel moderne editors geven dit aan in de statusbalk. Als je vreemde tekens ziet zoals “�”, beschadigde accenten of onjuist weergegeven “ñ/ç”, controleer dan de bestandscodering en de instellingen van de editor/server/database.

Goede praktijken om verrassingen te voorkomen

Declareer UTF-8 zo vroeg mogelijk in HTML- en HTTP-headers. Zorg voor consistente codering in de gehele stack (bronbestanden, sjablonen, database en verbinding). Vermijd het mengen van verschillende coderingen op dezelfde pagina of in dezelfde workflow en gebruik tools die de invoer valideren/normaliseren.

Voor integraties en API's, geef altijd de codering op in headers (Content-Type: application/json; charset=UTF-8bijvoorbeeld). Test met meertalige gegevens (accenten, CJK, emoji's) om zwakke punten te detecteren vóór de productie.

UTF-8 heeft de overhand gekregen omdat het een goede balans biedt tussen compatibiliteit, efficiëntie en bereik . Het is de meest praktische manier om ervoor te zorgen dat tekst intact wordt overgedragen tussen culturen, systemen en applicaties, ongeacht of deze accenten, technische symbolen of niet-Latijnse schriften bevat.

wat is unicode-code
Gerelateerd artikel:
Wat is Unicode: complete gids, toepassingen en coderingen