Was ist Unicode? Definition und Erklärung
Unicode ist ein internationaler Standard zur Codierung, Darstellung und Verarbeitung von Textzeichen aus nahezu allen Schriftsystemen der Welt. Jedes Zeichen erhält einen eindeutigen Codepunkt, der in verschiedenen Zeichencodierungen wie UTF-8 oder UTF-16 gespeichert werden kann. Dadurch ermöglicht Unicode die einheitliche Darstellung und Verarbeitung von Texten über verschiedene Plattformen und Sprachen hinweg.
- Inklusive Wildcard-SSL-Zertifikat
- Inklusive Domain Lock
- Inklusive 2 GB E-Mail-Postfach
Was ist Unicode?
Unicode, das ist die „Universelle Zeichencodierung”, abgeleitet vom englischen Begriff „Universal Character Encoding”. Es handelt sich dabei um einen Standard zum Kodieren von Schriftzeichen in Binärdarstellung. Dies ermöglicht das Speichern und Verarbeiten von Texten in digitalen Systemen.
Unicode ist insofern eine Neuerung, dass es nicht an die Formate und Kodierungen eines einzelnen Alphabets einer bestimmten menschlichen Sprache gebunden ist. Unicode wurde vielmehr mit dem Ziel geschaffen, als einheitlicher Standard für die Abbildung sämtlicher von Menschen entwickelter Schriftsysteme und Zeichen zu dienen.
Seit der Veröffentlichung von Unicode 1.0 zum Ende des Jahres 1991 ist der Standard seiner Bestimmung gerecht geworden. Unicode wird intern von Browsern und Betriebssystemen als einheitliches Format verwendet. Mit der vom Unicode Consortium im Jahr 2024 veröffentlichten Version 16.0 umfasste der Unicode-Standard inzwischen ein Repertoire von insgesamt 154.998 Zeichen. Der vom Unicode-Standard abgedeckte Zeichensatz ist vollständig deckungsgleich mit dem „Universal Coded Character Set“ (UCS), der als ISO/IEC 10646 international genormt ist.
Technische Basis für Schriftzeichenkodierung
Zunächst ist es wichtig, zu verstehen, dass alle in einem digitalen System vorhandenen Informationen auf einer tieferen Ebene aus endlosen Ketten von Nullen und Einsen bestehen. Man spricht dabei auch von der „Binärdarstellung”. Der Binärcode ist an sich so etwas wie ein Alphabet. Allerdings gibt es im Binärcode nur zwei „Buchstaben”: Nullen und Einsen. Jede Stelle innerhalb einer Sequenz von Nullen und Einsen wird als „Bit“ bezeichnet.
Der grundlegende Trick der digitalen Informationstechnologie ist, die Zeichen verschiedener Alphabete als Sequenzen von Nullen und Einsen abzubilden. So lassen sich Zahlen und Buchstaben kodieren, jedoch auch alle sonstigen unterscheidbaren Zustände. Generell spricht man dabei von „Symbolen”. Je länger die Sequenz von Nullen und Einsen für die Darstellung eines einzelnen Symbols ist, desto mehr Symbole lassen sich darstellen. Dabei verdoppelt sich die Anzahl der möglichen Symbole mit jedem hinzugefügten Bit.
Ein konkretes Beispiel: Stellen Sie sich vor, wir hätten binäre „Wörter”, welche zwei Bits lang sind. Dann ließen sich damit vier Zahlen kodieren:
2-Bit-Word | Zahl |
---|---|
00 | 0 |
01 | 1 |
10 | 2 |
11 | 3 |
Fügen wir ein weiteres Bit am Anfang der Sequenz dazu, verdoppelt sich die Anzahl möglicher Bit-Wörter. Diese bestehen aus den bereits bekannten Bit-Sequenzen, jeweils mit einer vorangestellten Null oder Eins. Somit können wir acht Zahlen kodieren:
3-Bit-Word | Zahl |
---|---|
000 | 0 |
001 | 1 |
010 | 2 |
011 | 3 |
100 | 4 |
101 | 5 |
110 | 6 |
111 | 7 |
Ein 8-Bit-Wort wird als Octet oder Byte bezeichnet.
Der Einfachheit halber haben wir hier exemplarisch die Kodierung von Zahlen gezeigt. Dasselbe Prinzip kommt jedoch in digitalen Systemen auch für die Kodierung von Buchstaben oder jeglichen anderen Zeichen und Zuständen zum Tragen. Hier das stark vereinfachte Beispiel einer Binärkodierung von Buchstaben:
3-Bit-Word | Buchstabe |
---|---|
000 | A |
001 | B |
010 | C |
Die grafische Repräsentation eines Zeichens nennt man Glyphe. Je nach eingesetztem Font gibt es unterschiedliche Glyphen für dasselbe Zeichen, und sogar innerhalb eines Fonts kann es mehrere Varianten für eine Glyphe geben. Denken Sie z.B. an verschiedene Gewichte, Ligaturen, Kursivschrift etc. Hier eine erweiterte Darstellung, die die Zuordnung vom Zeichen bis zur Glyphe umfasst:
Binärdarstellung | Dezimalzahl | Kodiertes Zeichen | Glyphe |
---|---|---|---|
1000001 | 65 | großes „A“ des lateinischen Alphabets | A |
1100001 | 97 | kleines „a“ des lateinischen Alphabets | a |
0110000 | 48 | Arabische Ziffer „0” | 0 |
0111001 | 57 | Arabische Ziffer „9” | 9 |
11000100 | 196 | großes „Ä“ | Ä |
11000001 | 193 | großes „Á“ | Á |
Terminologie der Schriftzeichenkodierung
Die digitale Schriftzeichenkodierung umfasst eine Reihe spezifischer Konzepte. Im Deutschen findet sich zum Teil eine synonyme Nutzung der verschiedenen Begriffe. Um eine präzise Unicode-Definition geben zu können, bilden wir hier auch die englischen Terme ab:
Begriff | Bedeutung | Englischer Term |
---|---|---|
Zeichensatz | Menge möglicher Zeichen, z.B. Ziffern „0–9“, Buchstaben „a–z“, etc. | Character set |
Codepunkt | Einem bestimmten Zeichen zugeordnete Nummer innerhalb der Code-Domäne | Code point |
Zeichencode | Zuordnung eines jeden Zeichens zu genau einem Codepunkt | Coded character set |
Zeichencodierung | Prozess zur Umwandlung eines Zeichens in eine technische Struktur, z. B. Binärdarstellung | Character encoding |
Übersicht gebräuchlicher Zeichenkodierungen
Vor dem Aufkommen von Unicode gab es eine große Vielzahl spezifischer Kodierungen. Die Norm war, eine eigene Kodierung für jede Sprache oder Sprachfamilie einzusetzen. Dies führte häufig zu Darstellungsfehlern und Daten-Inkonsistenzen. Um dem entgegenzuwirken, wurden Zeichenkodierungen oft als abwärtskompatible Übermenge eines bereits existierenden Standards modelliert. So baut der moderne Unicode-Standard auf der früheren Zeichencodierung ISO Latin-1 auf, welche wiederum auf dem ASCII-Zeichencode basiert.
Zeichencodierung | Bits pro Zeichen | Mögliche Zeichen | Zeichensatz |
---|---|---|---|
ASCII | 7 Bit | 128 | Buchstaben, Zahlen und Sonderzeichen der US-Amerikanischen Tastatur, sowie Steuerzeichen für Fernschreiber |
ISO Latin-1 (ISO 8859-1) | 8 Bit | 256 | Erste 128 Zeichen wie ASCII, weitere 128 Zeichen für Sonderzeichen europäischer Sprachen |
Universal Coded Character Set 2 (UCS-2) | 16 Bit | 65.536 | Zeichen des „Basic Multilingual Plane” (BMP); erste 256 Zeichen wie bei ISO Latin-1 |
Universal Coded Character Set 4 (UCS-4) | 32 Bit | 1.114.111 | Zeichen des BMP und weitere darüber hinausgehende; insgesamt 143.859 Zeichen in Unicode Version 13.0; erste 256 Zeichen wie ISO Latin-1 |
UCS Transformation Format 8 Bit (UTF-8) | 8/16/24/32 Bit | 1.114.111 | Beliebige Zeichen aus UCS-2 und UCS-4; erste 256 Zeichen wie ISO Latin-1 |
Aufbau des Unicode-Standards
Der Unicode-Standard definiert Zeichen und korrespondierende Codepunkte für Buchstaben, Silbenzeichen, Ideogramme, Satzzeichen, Sonderzeichen und Ziffern. Dabei werden neben dem lateinischen das griechische, kyrillische, arabische, hebräische und thailändische Alphabet unterstützt. Ferner die japanischen (Katakana, Hiragana), chinesischen und koreanischen Schriften (Hangul). Hinzu kommen mathematische, kaufmännische und technische Sonderzeichen, sowie historische Steuerzeichen für Fernschreiber.
Die Zeichen sind in einer Reihe von Zeichentabellen zusammengefasst. Wir geben hier einen Überblick der gebräuchlichsten Zeichentabellen.
Schriftsysteme des Unicode-Standards
Zeichentabelle | Enthält u.A. die Alphabete |
---|---|
Europäische Schriftsysteme | Armenisch, Georgisch, Griechisch, Lateinisch |
Afrikanische Schriftsysteme | Äthiopisch, Ägyptische Hieroglyphen, Koptisch |
Schriftsysteme des mittleren Ostens | Arabisch, Hebräisch, Syrisch |
Zentralasiatische Schriftsysteme | Mongolisch, Tibetisch, Alt-Türkisch |
Südasiatische Schriftsysteme | Brahmi, Tamilisch, Vedisch |
Südostasiatische Schriftsysteme | Khmer, Rohingya, Thai |
Schriftsysteme Indonesiens und Ozeaniens | Balinesisch, Buginesisch, Javanesisch |
Ostasiatische Schriftsysteme | CJK (Chinesisch, Japanisch, Koreanisch), Hangul (Koreanisch), Hiragana (Japanisch) |
Amerikanische Schriftsysteme | Cherokee, Kanadische Silbenschrift, Osage |
Symbole und Satzzeichen des Unicode-Standards
Zeichentabelle | Enthält u.A. die Zeichen |
---|---|
Notationssysteme | Braille-Muster, musikalische Notenschrift, Duployan Stenographie |
Satzzeichen | Satzzeichen der englischen Sprache, Satzzeichen europäischer Sprachen, CJK-Satzzeichen |
Alphanumerische Symbole | Mathematische Buchstaben, eingekreiste Buchstaben |
Technische Symbole | Symbole der Programmiersprache APL, Symbole für optische Texterkennung |
Zahlen & Ziffern | Maya-Ziffern, Osmanische Siyaq-Zahlzeichen, Ziffern der sumerischen Keilschrift |
Mathematische Symbole | Pfeile, Mathematische Operatoren, Geometrische Formen |
Emoji & Piktogramme | Emoticons, Dingbats, weitere Piktogramme |
Andere Symbole | Alchemistische Symbole, Währungszeichen, Schach-, Domino-, und Mahjong-Zeichen |
Wofür wird Unicode verwendet?
Der Unicode-Standard dient in erster Linie als universelle Grundlage für die Verarbeitung, Speicherung und den Austausch von Text in jeder Sprache. Die meisten modernen Software-Komponenten, wie Bibliotheken, Protokolle, Datenbanken, usw., die auf Text operieren, bauen auf Unicode auf. Wir verdeutlichen die Bandbreite an Einsatzmöglichkeiten anhand der folgenden Beispiele.
Betriebssysteme
Unicode ist in den meisten modernen Betriebssystemen der interne Standard für die Abbildung von Text. Manche Betriebssysteme, wie Apples macOS, erlauben die Nutzung von Unicode-Zeichen in Dateinamen.
Websites
Die Unicode-Variante UTF-8 hat sich als Standard für die Kodierung von HTML-Dokumenten durchgesetzt. Bereits 2016 benutzten mehr als 80 Prozent der weltweit meistbesuchten Websites UTF-8 für die Speicherung und Darstellung ihrer HTML-Dokumente. Für die Nutzung von nicht-ASCII-Buchstaben in Domänen-Namen hat sich der Punycode-Standard durchgesetzt.
- Intuitives Baukastensystem mit KI-Unterstützung
- Bilder und Texte wie von Profis gemacht, direkt SEO-optimiert
- Domain, SSL und E-Mail-Postfach inklusive
Programmiersprachen
Viele moderne Programmiersprachen nutzen Unicode als Basis für die Verarbeitung von Text. Eine neuere Entwicklung ist die Möglichkeit, Unicode-Zeichen zur Benennung von Variablen und Funktionen zu nutzen. Dies ist unter anderem in ECMAScript/JavaScript möglich und wird im folgenden Code illustriert:
let ︎👍 = true;
let 👎 = false;
if (bool_var === ︎👎) {
// …
}
javascriptDatenbanken
Die beliebte und auf breiter Basis eingesetzte Datenbank MySQL unterstützt den kompletten Unicode-Zeichensatz mit der Zeichenkodierung „utf8mb4“. Bei Nutzung der Zeichenkodierung „utf8“ kommt es hingegen zum Verlust von Zeichen, deren Codepunkt mehr als drei Bytes umfasst.
Fonts
Fonts enthalten die für die grafische Darstellung von Text zum Einsatz kommenden Glyphen. Aufgrund der großen Menge der im Unicode-Standard enthaltenen Zeichen gibt es keinen Font, der sämtliche Zeichen enthält. Selbst die Untermenge des Basic Multilingual Plane wird nur von wenigen Fonts komplett abgedeckt. Hier ein paar Beispiele:
Unicode-Font | Glyphen | Lizenz |
---|---|---|
Noto | ca. 77.000 | Open Font License |
Sun-ExtA/B | ca. 50.000 | Freeware |
Unifont | ca. 63.000 | GNU GPL |
Code2000 | ca. 63.000 | Shareware |
- Daten zentral speichern, teilen und bearbeiten
- Serverstandort Deutschland (ISO 27001-zertifiziert)
- Höchste Datensicherheit im Einklang mit der DSGVO
Wie setzt man Unicode ein?
In vielen Fällen setzen Nutzerinnen und Nutzer Unicode ein, ohne sich dessen je bewusst zu werden. Digitaler Text liegt in den meisten Dokumenten und Anwendungen als Unicode vor und lässt sich von Nutzenden beliebig kopieren, einfügen und bearbeiten. Manchmal ergibt sich die Notwendigkeit für den Endnutzer bzw. die Endnutzerin, ein bestimmtes Unicode-Zeichen in Text einzufügen. Dafür gibt es verschiedene Möglichkeiten, die wir im Folgenden vorstellen.
Spezielle Software-Tastaturen
Die Nutzung spezieller Software-Tastaturen ist die wohl gebräuchlichste Methode, Unicode-Zeichen in Text einzufügen. Auf Mobilgeräten allgegenwärtig, erlauben Software-Tastaturen das Umschalten zwischen Sprachen und den dazugehörigen Alphabeten. Dabei ändert sich die Tastenbelegung, wobei alle Zeichen dem Unicode-Repertoire entstammen. Die Zeichen lassen sich beliebig mischen und miteinander in Texten kombinieren.
Ein gutes Beispiel hierfür sind die Emojis: Emojis sind in Unicode ganz normale Zeichen wie Buchstaben, Zahlen und Sonderzeichen. Wie von digitalen Zeichen gewohnt ist die Darstellung der Emojis unabhängig von deren interner Modellierung. Jedes Betriebssystem stellt ein und dasselbe Emoji leicht unterschiedlich dar.
Die nützlichen Software-Tastaturen finden sich nicht nur auf Mobilgeräten. Auch auf dem Desktop sind sie vorhanden. Sie lassen sich in Windows, macOS und vielen Linux-Distributionen leicht öffnen und stellen je nach ausgewählter Sprache eine unterschiedliche Menge an Zeichen dar. Da die Anzahl an Tasten limitiert ist, werden nicht sämtliche Unicode-Zeichen dargestellt. Vielmehr handelt es sich um eine sprachspezifische Auswahl der gebräuchlichsten Zeichen.
Unicode-Zeichentabellen
Neben den Software-Tastaturen sind Unicode-Zeichentabellen der wohl nützlichste Weg, auf Unicode-Zeichen zuzugreifen. Zur Erinnerung: ein Zeichencode („Coded character set“) ist die Menge aller Zeichen mitsamt ihrer korrespondierenden eindeutigen Codepunkte. Für eine solche Struktur bietet sich die Anordnung als Tabelle an, und in der Tat umfasst der Unicode-Standard genau solche, als Unicode Code Charts bezeichnete Tabellen. Aus diesen Tabellen lassen sich einerseits spezifische Zeichen kopieren, um diese anderweitig zu verwenden. Andererseits kann man als Endnutzerin bzw. Endnutzer den entsprechenden Codepunkt ablesen, z. B. um diesen als numerische Zeichen-Referenz zu nutzen — mehr dazu im nächsten Abschnitt.
Auch viele Desktop-Betriebssysteme enthalten eine Unicode-Zeichentabelle. Diese gibt einen Überblick aller verfügbaren Unicode-Zeichen samt Codepunkt, Beschreibung und Glyphe. Ein Zeichen lässt sich per Klick einfügen, bzw. kopieren. Eine Zeichentabelle lässt sich mit wenigen Zeilen Code auch selbst erzeugen. Wir zeigen im weiteren Verlauf des Artikels ein Beispiel in der Programmiersprache Python.
Numerische Zeichen-Referenz
Im Mittelpunkt des Unicode-Standards steht die Zuordnung von Zeichen zu Codepunkten. Kennt man den Codepunkt eines Zeichens, lässt sich dieser verwenden, um das entsprechende Zeichen in verschiedenen Kontexten einzubinden. Unter Windows erfolgt die Eingabe zum Einfügen von Unicode-Symbolen über die normale Hardware-Tastatur unter Nutzung einer speziellen Tastenkombination. Beachten Sie, dass die Nummer des Codepunkts normalerweise in Hexadezimal-Darstellung eingegeben werden muss.
Am häufigsten benötigen Programmierende die numerischen Zeichen-Referenzen. Die hexadezimale Darstellung der Codepunkte erlaubt die Abbildung eines Unicode-Zeichens in Zeichen des ASCII-Zeichensatzes. Wir zeigen das Vorgehen hier in HTML; prinzipiell funktioniert dieses ebenso in Python, C++ etc.
Das generelle Schema, um ein Zeichen per numerischer Referenz einzubinden, umfasst die Referenz selbst, sowie einen öffnenden und schließenden Terminus: In HTML-Dokumenten wird die numerische Referenz mit &#x
eröffnet und mit ;
abgeschlossen. Dazwischen wird ohne Leerzeichen der zwei- bis vierstellige Hexadezimal-Codepunkt eingetragen. Es ergibt sich das Muster &#xNNNN;
.
Um beispielshalber das Copyright-Zeichen „©“ in ein HTML-Dokument einzufügen, gehen wir nach folgendem Schema vor:
- In einer Unicode-Tabelle nach dem Zeichen suchen.
- Den zum Zeichen gehörigen Codepunkt ablesen. Im Falle unseres Beispiels ist der Codepunkt als „U+00A9“ angegeben, wobei es sich um die hexadezimale Darstellung handelt.
- Die Zeichen-Referenz komponieren und in HTML-Quelltext oder ein Markdown-Dokument eintragen. In unserem Fall geben wir
©
ein; dies ergibt das gerenderte Zeichen „©“.
Weniger gebräuchlich ist ein verwandter Ansatz, der die Nutzung von Codepunkten in Dezimal- statt Hexadezimaldarstellung erlaubt. In diesem Fall beginnt die numerische Referenz mit &#
(ohne das „x“) und schließt wie gehabt mit ;
ab. Dazwischen wird der Codepunkt in Dezimaldarstellung geschrieben. Im Fall unseres Beispiels ergibt sich die numerische Referenz ©
für das Copyright-Zeichen.
Nutzen Sie den Unicode Character Inspector, um schnell die verschiedenen Codes zu einem Zeichen zu erfahren.
Benannte Zeichen-Entitäten
Da die Schreibweise von Unicode-Zeichen als numerische Referenzen für den Menschen nicht intuitiv ist, gibt es noch eine weitere Methode. Es handelt sich dabei um die benannten Zeichen-Entitäten. Diese sind für häufig gebrauchte Zeichen definiert und ordnen dem Zeichen einen kurzen, einprägsamen Namen zu. Eine benannte Zeichen-Entität beginnt mit dem Und-Zeichen &
und endet mit einem Semikolon ;
. Dazwischen wird ohne Leerzeichen der definierte Name platziert. Um das Copyright-Zeichen „©“ in HTML einzufügen schreibt man einfach ©
.
Die komplette Liste der definierten Zeichen-Entitäten ist im HTML-Standard hinterlegt.
Programmiersprachen
Die meisten Programmiersprachen enthalten grundlegende Funktionen, mit denen sich Zeichen und Codepunkte umwandeln lassen. Die entsprechenden Funktionen heißen oft ord(Zeichen)
und chr(Codepunkt)
. Dabei gilt:
chr(ord(Zeichen)) == Zeichen
Beachten Sie, dass es immer möglich ist, den zu einem Zeichen korrespondierenden Codepunkt zu ermitteln. Andersherum funktioniert die Zuordnung nur für Zahlen, die tatsächlich als Codepunkte des Zeichencodes definiert sind. Wir zeigen hier das grundlegende Schema anhand eines kurzen Python-Beispiels:
ord('A') # `65`
# Hexadezimal-Codepunkt eines Zeichens ermitteln
hex(ord('A')) # `0x41`
# zu Codepunkt gehöriges Zeichen ermitteln
chr(65) # `'A'`
chr(0x41) # `'A'`
chr(0x110001) # Fehler, da Codepunkt > `0x110000`
pythonMithilfe dieser Funktionen ist es problemlos möglich, eine Zeichentabelle für Codepunkte des Unicode-Zeichensatzes zu erstellen. Dazu iteriert man die Codepunkte und gibt die korrespondierenden Zeichen aus. Mit Python ist dies innerhalb weniger Codezeilen erledigt:
# `range` bei `32` beginnen, da bei kleinerem Wert Steuerzeichen ausgegeben werden
# ASCII-Zeichensatz ausgeben
for code_point in range(32, 128):
print(code_point, hex(code_point), chr(code_point))
# ISO Latin-1 ausgeben
for code_point in range(32, 256):
print(code_point, hex(code_point), chr(code_point))
pythonProgramm-Bibliothek ICU
Die internationalen Komponenten für Unicode („International Components for Unicode“, ICU) sind in einer vom Unicode-Konsortium bereitgestellten Programm-Bibliothek zusammengefasst. Die Bibliothek wird unter einer Open-Source-Lizenz veröffentlicht und lässt sich auf vielen Betriebssystemen einsetzen. Die Software dient der programmatischen Internationalisierung („Internationalization“, oft abgekürzt als „i18n“). Zu ihren Einsatzbereichen zählen unter anderem:
- Verarbeitung von Unicode-Texten
- Unterstützung regulärer Ausdrücke in Unicode
- Parsen und Formatierung von Kalenderdaten, Zeitangaben, Zahlen, Währungen und Nachrichten
Die ICU-Bibliothek liegt in zwei Versionen vor:
- „icu4c“ ist in C/C++ geschrieben und stellt eine API für diese Sprachen bereit.
- „icu4j“ ist in Java geschrieben und stellt für diese Sprache eine API bereit.
Der Einsatz der Komponenten liefert konsistente Resultate unabhängig von der zugrundeliegenden Plattform.
Charset-Meta-Angabe im Head von HTML-Dokumenten
Die meisten HTML-Dokumente liegen heutzutage in der Zeichencodierung UTF-8 vor. Um sicherzustellen, dass Seitenbesuchenden das Dokument ohne fehlerhafte Zeichen angezeigt wird, sollte eine „Charset“-Meta-Tag-Angabe im Head des HTML-Dokuments platziert werden. Diese weist den Browser an, das abgerufene Dokument als UTF-8 zu interpretieren und ist nachfolgend exemplarisch dargestellt:
<head>
<meta charset="utf-8">
<!-- weitere Head-Elemente -->
</head>
htmlInstagram-Fonts
Das beliebte Social Network Instagram erlaubt keine Textformatierung für Biografie-Informationen, Beiträge oder Stories. Die kreativen Möglichkeiten der Nutzerinnen und Nutzer sind damit beschränkt. Findige Entwickelnde haben jedoch mit einem Trick Abhilfe geschaffen: Instagram setzt auf Unicode, und so ist es möglich, aus speziellen Zeichen einen formatiert wirkenden Text zu komponieren. Dabei kommen insbesondere Zeichen zum Einsatz, die lateinischen Buchstaben ähneln. Am einfachsten lässt sich ein derartiger Text mit einem Insta Fonts Generator erzeugen. Die Nutzung von Instagram-Fonts funktioniert darüber hinaus auch in anderen sozialen Netzwerken.