Unicode - Wikipedia
Naar inhoud springen
Uit Wikipedia, de vrije encyclopedie
Unicode-logo
Unicode
is een internationale standaard (nauw samenhangend met
ISO-10646
) voor de codering van grafische tekens en symbolen in binaire codes, vergelijkbaar met de
ASCII
-standaard. De standaard voorziet alle tekens van alle geschreven talen van een naam (in de standaard in hoofdletters geschreven) en een nummer (vaak
hexadecimaal
geschreven, voorafgegaan door U+). Er is bijvoorbeeld het teken LATIN CAPITAL LETTER A met nummer U+0041 (65)
, los van de
lettertypes
waarin het weergegeven kan worden. De grafische weergave per lettertype behoort niet tot de standaard.
De standaard wordt onderhouden door het
Unicode Consortium
. In tegenstelling tot ASCII (alleen Engels) of
Latin-1
(alleen West-Europese talen) heeft Unicode als doel alle gebruikte
schriften
(zoals het
Griekse
schrift en
Chinese karakters
) te ondersteunen. De standaard bevat ruim 100.000 gestandaardiseerde tekens en ongeveer 900.000 voor toekomstig gebruik gereserveerde codes. De Unicode standaard schrijft niets voor over de visuele representatie van een karakter.
Unicode stelt geen beperkingen aan het aantal talen dat in één enkel document gebruikt kan worden. Naast letters en cijfers bevat Unicode ook veel
symbolen
, zoals: kruisen, wiskundige tekens, muntsymbolen enzovoort. Unicode bevat geen symbolen die niet in een schrift worden gebruikt, zoals verkeersborden. Enkele "tekens" in Unicode zijn zelf geen grafische tekens, maar hebben betekenis voor de wijze waarop de zichtbare tekens geplaatst worden, zoals
carriage return
line feed
spatie
en de niet-afbrekende spatie (
harde spatie
ofwel NBSP, wat staat voor het Engelse
non-breaking space
).
Een neveneffect bij omzetting van gegevens die anders gecodeerd waren, is dat bij sorteren op numerieke volgorde een ander resultaat (space, numeric, uppercase, lowercase (SNUL)) dan bijvoorbeeld bij
EBCDIC
(space, lowercase, uppercase, numeric (=SLUN)) verkregen wordt, omdat de tekens anders gerangschikt zijn.
Geschiedenis
bewerken
brontekst bewerken
Bij de eerste computers waren alle teksten (programma's en in- en uitvoer) in hoofdletters, met als verdere tekens cijfers, leestekens en dergelijke, zie bijvoorbeeld
GBCD
. Later werden kleine letters toegevoegd, zie bijvoorbeeld
ASCII
. Deze 7-bits code (8-bits zijn samen 1 byte) bevat alleen de
Latijnse letters
zonder
diakritische tekens
. Het lag daarom voor de hand ASCII uit te breiden tot
extended ASCII
met een achtste bit, maar er was niet genoeg ruimte voor alle tekens in alle talen met het Latijnse schrift. Daarom kregen veel talen hun eigen variant van extended ASCII en er was ook
EBCDIC
. Er is geen standaardmethode om aan te geven welke variant gebruikt wordt, zo gebeurt dit in
HTML
anders dan in
e-mail
, en in
platte tekst
kan het al helemaal niet, wat veel spraakverwarring oplevert.
Voor veel schriften, zoals het
Chinese
Arabische
en
Japanse schrift
, zijn 256 tekens niet voldoende. Voor deze uitgebreidere tekenverzamelingen worden traditioneel al andere coderingen gebruikt, die ruimte voor meer tekens bevatten.
Zelfs met al deze verschillende coderingen voor de verschillende talen was het nog niet mogelijk om over een
vreemde taal
te schrijven. Wanneer men in een Chinese tekst over het
Arabisch
wilde schrijven, kon men dat niet in de standaard-Chinese codering: de Arabische letters zijn daarin namelijk niet opgenomen. Unicode en de daarvoor beschikbare coderingen bieden voor al dit soort problemen uitkomst.
Versies
bewerken
brontekst bewerken
De Unicodestandaard is ontstaan op initiatief van een aantal organisaties die orde wilden scheppen in de chaos van tekencoderingen. In
1991
lanceerden zij hun eerste standaard: Unicode 1.0.
Unicode 1.1 had ruimte voor 65.536 (= 2
16
) tekens. Dit aantal bleek echter te weinig om alle schriften van de wereld te kunnen ondersteunen. Zo bestaat alleen het
Chinese schrift
al uit zo'n 25.000 tekens.
In Unicode 2.0 werd het aantal codes uitgebreid naar ruim een miljoen, zie ook onder.
Versie
Datum
Aantal tekens
ISBN
Opmerking
1.0
oktober 1991
7.161
0-201-56788-1
Eerste versie met
Arabisch
Armeens
Bengaals
Bopomofo
Cyrillisch
Devanagari
Georgisch
Grieks
met
Koptisch
Gujarati
Gurmukhi
Hangul
Hebreeuws
Hiragana
Kannada
Katakana
Laotiaans
Latijns
Malayalam
Odia
Tamil
Telugu
Thais
en
Tibetaans
1.0.1
juni 1992
28.359
0-201-56788-1
Aantal tekens toegevoegd om te voldoen aan
ISO/IEC 10646-1
. Dit zijn de "CJK"-tekens voor de Chinese, Japanse en Koreaanse schriften.
1.1
juni 1993
34.233
Nieuwe tekens toegevoegd om te voldoen aan de bijgewerkte
ISO/IEC 10646-1
. Dit houdt meer
Hangul
-tekens in.
2.0
juli 1996
38.950
0-201-48345-9
Eerste versie van Unicode die meer dan 65.536 tekens ondersteunt. De Hangul-tekens verwijderd en een grotere reeks opnieuw toegevoegd op een andere locatie.
2.1
mei 1998
38.952
Euroteken
toegevoegd
3.0
september 1999
49.259
0-201-61633-5
O.a.
Cherokee
Khmer
Mongools
Birmees
Ogham
, ...
3.1
maart 2001
94.205
Zeer veel Chinese (CJK) karakters toegevoegd
3.2
maart 2002
95.221
Enkele Filipijnse schriften toegevoegd (onder andere
Baybayin
4.0
april 2003
96.447
0-321-18578-1
Hexagram
-symbolen,
Lineair B
, ...
4.1
maart 2005
97.720
O.a.
Tifinagh
toegevoegd
5.0
juli 2006
99.089
0-321-48091-0
Balinees
Spijkerschrift
N'Ko
, ... toegevoegd
5.1
april 2008
100.713
O.a.
Soendanees
Saurashtra
, ... en ook tekens voor
Mahjong
en
Domino
en de
Schijf van Phaistos
5.2
oktober 2009
107.296
978-1-936213-00-9
O.a.
Avestisch
Bamoun
, ...
6.0
oktober 2010
109.242
978-1936213-01-6
2088 nieuwe karakters, van onder andere
Batak
Brahmi
Mandaïsch
en een aantal symbolen en emoticons
6.1
januari 2012
110.181
onder andere
Chakma
Sharada
, ... toegevoegd
6.2
september 2012
110.182
ISO/IEC 10646:2012 + Het Turkse lira-teken toegevoegd
6.3
september 2013
110.187
6 nieuwe tekens
7.0
juni 2014
113.021
Bassa
Kaukasisch Albanees
Duployaans
Elbasan
Grantha
Khojki
Khudabadi
Lineair A
Mahajani
Manichees
Mende Kikakui
Modi
Mro
Nabatees
Oudnoordarabisch
Oud-Permisch
Pahawh Hmong
Palmyreens
Pau Cin Hau
Psalter Pahlavi
Siddhaṃ
Tirhuta
Warang Citi
Dingbats
8.0
juni 2015
120.737
o.a.
Ahom
Anatolische hiërogliefen
Hatran
Multani
Oudhongaars
SignWriting
9.0
juni 2016
128.237
o.a.
Adlam
Bhaiksuki
Marchen
Newa
Osage
Tangut
10.0
juni 2017
136.755
o.a.
Masaram Gondi
Nüshu
Soyombo
Hentaigana
Bitcoin
11.0
juni 2018
137.374
o.a.
Dogri
Hanifi Rohingya
Copyleft
12.0
maart 2019
137.993
o.a.
Laotiaans schrift
, uitbreidingen
Tamil
Hiragana
en
Katakana
13.0
maart 2020
143.924
o.a.
Jezidi
Chorasmisch
Divehi Akuru
Kitan
; 55 nieuwe emoji
14.0
september 2021
144.762
15.0
september 2022
149.251
15.1
september 2023
149.878
16.0
september 2024
155.063
17.0
september 2025
159.866
Codering
bewerken
brontekst bewerken
De Unicodestandaard kent aan elk teken een nummer toe,
codepunt
genoemd, dat geschreven wordt als U+
xxxx
, waarin de
x'
en de
hexadecimale
cijfers van het codepunt zijn (minimaal vier, zo nodig met voorloopnullen, maximaal zes). De codepunten die gekoppeld zijn of kunnen worden aan een teken (de zogenaamde
Unicode scalaire waarden
) lopen van U+0000 (0) tot en met U+D7FF (55.295) en van U+E000 (57.344) tot en met U+10FFFF (1.114.111). Dat zijn 55.296 + 8.192 = 63.488 (0xF800) tekens met een codepunt tot en met twee bytes, plus 1.048.576 (0x100000) andere, in totaal 1.112.064 (0x10F800). De onderbreking bestaat uit 2048 (0x800) codepunten die ten behoeve van gunstige eigenschappen van de UTF-16-codering niet gebruikt worden; ze worden
surrogaatcodepunten
genoemd.
Unicode biedt verschillende coderingsvormen (
encoding forms
) om de scalaire waarden te representeren, onder andere:
UTF-32
: Een code-eenheid (
code unit
) heeft 32 bits. Tekens worden opgeslagen in één code-eenheid. Een nadeel is dat ook kleine scalaire waarden vier bytes vergen.
UTF-16
: Een code-eenheid heeft 16 bits. Tekens worden opgeslagen in een of twee code-eenheden, de lagere in een, de hogere in twee. UTF-16 is een uitbreiding van
UCS-2
, de codering van Unicode t/m versie 1.1. Voor de tekens die worden opgeslagen in twee code-eenheden worden alleen de 2048 16-bits getallen gebruikt die niet afzonderlijk worden gebruikt voor de opslag van een teken. Daardoor blijven er 63.488 16-bits getallen over voor opslag van een teken in één code-eenheid. Van de genoemde 2048 16-bits getallen worden er 1024 uitsluitend gebruikt als eerste van de twee 16-bits getallen die een teken representeren, en 1024 uitsluitend als tweede, wat 1.048.576 combinaties oplevert, voor even zoveel scalaire waarden. Zo'n combinatie wordt een
surrogaatpaar
genoemd.
UTF-8
: Een code-eenheid heeft 8 bits. Tekens worden opgeslagen in een tot vier code-eenheden, hoe groter de scalaire waarde hoe meer. Voor de tekens die worden opgeslagen in twee tot vier code-eenheden, worden niet de 128 8-bits getallen gebruikt die afzonderlijk worden gebruikt voor de opslag van een teken. Van de resterende 128 8-bits getallen worden er 64 uitsluitend gebruikt voor de vervolg-8-bits getallen voor tekens die worden opgeslagen in twee tot vier code-eenheden. Van de resterende 64 8-bits getallen worden er 32 uitsluitend gebruikt voor het eerste 8-bits getal voor de 1920 tekens die worden opgeslagen in twee code-eenheden, 16 uitsluitend voor het eerste 8-bits getal voor de 61.440 tekens die worden opgeslagen in drie code-eenheden, 8 uitsluitend voor het eerste 8-bits getal voor de 1.048.576 tekens die worden opgeslagen in vier code-eenheden, en 8 niet gebruikt. In deze codering worden ASCII-tekens onveranderd gecodeerd, en vergen daardoor minder geheugen dan met UTF-16 (een in plaats van twee bytes), maar vrij grote scalaire waarden vergen meer geheugen (drie in plaats van twee bytes).
Codegebied
hexadecimaal
UTF-32
binair
UTF-16
binair
UTF-8
binair
Opmerkingen
U+0000..U+007F
(128 = 0x80 ASCII-equivalenten)
00000000 00000000
00000000 0
aaaaaaa
00000000 0
aaaaaaa
aaaaaaa
U+0080..U+07FF
(1.920 = 0x780 scalaire waarden)
00000000 00000000
00000
bbb aaaaaaaa
00000
bbb aaaaaaaa
110
bbbaa
10
aaaaaa
U+0800..U+D7FF en U+E000..U+FFFF
(61.440 = 0xF000 scalaire waarden, de resterende in het
Basic Multilingual Plane
00000000 00000000
bbbbbbbb aaaaaaaa
bbbbbbbb aaaaaaaa
1110
bbbb
10
bbbbaa
10
aaaaaa
U+010000..U+10FFFF
(1.048.576 = 0x100000 supplementaire codepunten)
00000000 000
ccccc
bbbbbbbb aaaaaaaa
110110
dd ddbbbbbb
110111
bb aaaaaaaa
11110
ccc
10
ccbbbb
10
bbbbaa
10
aaaaaa
dddd
ccccc
− 1
Aangezien computers de data in een code-eenheid die meerdere bytes beslaat, op verschillende wijzen kunnen opslaan, zijn er van UTF-32 en UTF-16 twee varianten mogelijk, namelijk
big-endian
, waarbij de meest significante byte zich op het laagste adres bevindt, en
little-endian
, met de minst significante byte eerst.
De 256 tekens van
ISO-8859-1
zijn in Unicode onder dezelfde codes opgenomen: U+0000 t/m U+00FF. De tweede 128 hiervan worden echter in Unicode in geen van de drie coderingsvormen in één byte gerepresenteerd. Ook andere codepagina's van
ISO 8859
vindt men in Unicode terug, waarbij de oorspronkelijke tekenvolgorde gehandhaafd is.
Sorteren
bewerken
brontekst bewerken
Het sorteren van tekens op basis van de scalaire waarde komt bij UTF-32 en UTF-8 overeen met het sorteren op de daarbij behorende (
big-endian
) bytereeksen (in de zin dat 0x01 0x00 vóór 0x02 komt omdat 0x01 vóór 0x02 komt). Dit geldt voor UTF-16 niet wanneer er tekens van zowel het Basic Multilingual Plane als van een ander plane vergeleken worden.
Gebruik
bewerken
brontekst bewerken
In HTML- en XML-documenten kunnen Unicode-tekens die niet worden ondersteund in de gebruikte karaktercodering, worden ingevoegd via
karakter-entiteitreferenties
. Zo wordt de hoofdletter A weergegeven door
#65; (decimaal) of
#x41; (hexadecimaal).
Schriften
bewerken
brontekst bewerken
In september 2020 voorziet Unicode in tekens voor 154 schriften, onder andere de onderstaande:
Arabisch
Armeens
Bengaals
Birmees
Zhuyin
Braille
Cherokee
Chinees
Kanji
Hanja
Hanzi
Cyrillisch
Devanagari
Eskimo-Aleoetische talen
Ge'ez
(Ethiopisch)
Georgisch
Grieks
Gujarati
Gurmukhi
Hangul
(Koreaans)
Hebreeuws
Japans
Kanji
Hiragana
Katakana
Kannada
Khmer
Koptisch
Laotiaans
Latijn
(westers e.a.)
Malayalam
Mongools
Ogham
Odia
Syrisch
Tamil
Thai
Tibetaans
Tifinagh
Yi
Het aantal schriften wordt nog voortdurend uitgebreid. Ook veel historische schriften worden opgenomen. De volledige lijst kan worden geraadpleegd op de Unicode-website.
Zie ook
bewerken
brontekst bewerken
Lijst van Unicode-subbereiken
Externe links
bewerken
brontekst bewerken
Homepage van de Unicode-werkgroep
DecodeUnicode – Unicode-WIKI
, 50.000 gifs
Links naar Unicode-codepagina's
Veel verschillende tekens
Bronnen, noten en/of referenties
CodeCharts (108 MB)
op unicode.org, juni 2018, bezocht 9-12-2018
en
Unicode 13.0 Character Code Charts
Mediabestanden
Zie de categorie
Unicode
van
Wikimedia Commons
voor mediabestanden over dit onderwerp.
Overgenomen van "
Categorie
Tekencodering
Unicode
Onderwerp toevoegen