Om een computer in staat te stellen tekst en cijfers op te slaan die mensen kunnen begrijpen, moet er een code zijn die transformeert karakters in cijfers. De Unicode-standaard definieert een dergelijke code met behulp van tekencodering.
De reden waarom tekencodering zo belangrijk is, is dat elk apparaat dezelfde informatie kan weergeven. Een aangepast tekencoderingsschema werkt mogelijk uitstekend op één computer, maar er zullen problemen optreden wanneer u diezelfde tekst naar iemand anders stuurt. Het weet niet waar je het over hebt, tenzij het ook het coderingsschema begrijpt.
Tekencodering
Alle tekencodering doet een nummer toewijzen aan elk teken dat kan worden gebruikt. Je zou nu een karaktercodering kunnen maken.
Ik zou bijvoorbeeld kunnen zeggen dat de brief EEN wordt het nummer 13, a = 14, 1 = 33, # = 123, enzovoort.
Dit is waar branchebrede normen binnenkomen. Als de hele computerindustrie hetzelfde tekencoderingsschema gebruikt, kan elke computer dezelfde tekens weergeven.
Wat is Unicode?
ASCII (American Standard Code for Information Interchange) werd het eerste wijdverbreide coderingsschema. Het is echter beperkt tot slechts 128 karakterdefinities. Dit is prima voor de meest voorkomende Engelse tekens, cijfers en leestekens, maar is een beetje beperkend voor de rest van de wereld.
Natuurlijk wil de rest van de wereld hetzelfde coderingsschema voor hun personages. Maar voor een tijdje, afhankelijk van waar je was, is er mogelijk een ander teken weergegeven voor dezelfde ASCII-code.
Uiteindelijk begonnen de andere delen van de wereld hun eigen coderingsschema's te maken en de dingen begonnen een beetje verwarrend te worden. Niet alleen waren de coderingsschema's van verschillende lengtes, programma's moesten ook uitzoeken welk coderingsschema ze zouden moeten gebruiken.
Het werd duidelijk dat er een nieuw tekencoderingsschema nodig was, toen de Unicode-standaard werd gemaakt. Het doel van Unicode is om alle verschillende coderingsschema's te verenigen, zodat de verwarring tussen computers zoveel mogelijk kan worden beperkt.
Tegenwoordig definieert de Unicode-standaard waarden voor meer dan 128.000 tekens en is te zien op de Unicode Consortium. Het heeft verschillende tekencoderingsvormen:
- UTF-8: Gebruikt slechts één byte (8 bits) om Engelse karakters te coderen. Het kan een reeks bytes gebruiken om andere tekens te coderen. UTF-8 wordt veel gebruikt in e-mailsystemen en op internet.
- UTF-16: Gebruikt twee bytes (16 bits) om de meest gebruikte tekens te coderen. Indien nodig kunnen de extra tekens worden weergegeven door een paar 16-bits nummers.
- UTF-32: Gebruikt vier bytes (32 bits) om de tekens te coderen. Het werd duidelijk dat naarmate de Unicode-standaard groeide, een 16-bits nummer te klein is om alle tekens weer te geven. UTF-32 kan elk Unicode-teken vertegenwoordigen als één nummer.
Notitie: UTF betekent Unicode Transformation Unit.
Codepunten
Een codepunt is de waarde die een teken krijgt in de Unicode-standaard. De waarden volgens Unicode worden geschreven als hexadecimale getallen en hebben een voorvoegsel van U +.
Om bijvoorbeeld de tekens te coderen die we eerder hebben bekeken:
- EEN is U + 0041
- een is U + 0061
- 1 is U + 0031
- # is U + 0023
Deze codepunten zijn opgesplitst in 17 verschillende secties, vliegtuigen genaamd, geïdentificeerd door nummers 0 tot 16. Elk vliegtuig bevat 65.536 codepunten. Het eerste vlak, 0, bevat de meest gebruikte karakters en staat bekend als het Basic Multilingual Plane (BMP).
Code-eenheden
De coderingsschema's bestaan uit code-eenheden, die worden gebruikt om een index te geven voor waar een teken zich op een vlak bevindt.
Beschouw UTF-16 als een voorbeeld. Elk 16-bits nummer is een code-eenheid. De code-eenheden kunnen worden omgezet in codepunten. Het symbool voor platte noten ♭ heeft bijvoorbeeld een codepunt van U + 1D160 en leeft op het tweede vlak van de Unicode-standaard (aanvullend ideografisch vlak). Het zou worden gecodeerd met de combinatie van de 16-bits code-eenheden U + D834 en U + DD60.
Voor de BMP zijn de waarden van de codepunten en code-eenheden identiek. Dit maakt een snelkoppeling naar UTF-16 mogelijk die veel opslagruimte bespaart. Het hoeft maar één 16-bits nummer te gebruiken om die tekens weer te geven.
Hoe gebruikt Java Unicode?
Java is gemaakt rond de tijd dat de Unicode-standaard waarden had gedefinieerd voor een veel kleinere set tekens. Destijds dacht men dat 16-bits meer dan genoeg zouden zijn om alle karakters te coderen die ooit nodig zouden zijn. Met dat in gedachten was Java ontworpen om UTF-16 te gebruiken. Het char-gegevenstype werd oorspronkelijk gebruikt om een 16-bits Unicode-codepunt weer te geven.
Sinds Java SE v5.0 vertegenwoordigt het teken een code-eenheid. Het maakt weinig uit voor het weergeven van tekens in het Basic Multilingual Plane omdat de waarde van de code-eenheid hetzelfde is als het codepunt. Het betekent echter wel dat voor de personages op de andere vliegtuigen twee tekens nodig zijn.
Het belangrijkste om te onthouden is dat een enkel char-gegevenstype niet langer alle Unicode-tekens kan vertegenwoordigen.