- Unicode weist jedem Zeichen einen eindeutigen Codepunkt zu und synchronisiert sein Repertoire mit ISO/IEC 10646.
- UTF-8, UTF-16 und UTF-32 kodieren dieselben Zeichen und ermöglichen eine verlustfreie Konvertierung.
- Normalisierungs-, Bidi- und UCD-Eigenschaften gewährleisten einen konsistenten Vergleich, eine konsistente Anordnung und ein konsistentes Rendering.
- Die Einführung von Unicode (im Web vorzugsweise UTF-8) verhindert Beschädigungen und erleichtert die Internationalisierung.
Unicode ist die gemeinsame Sprache, die Computer bei der Textverarbeitung sprechen : Sie ordnet jedem Zeichen und Symbol aus nahezu jedem Schriftsystem eine eindeutige Nummer zu, sodass Texte nahtlos zwischen Plattformen und Ländern gespeichert, verarbeitet und ausgetauscht werden können.
Dieser Standard entstand, um die Einschränkungen alter Zeichensätze ( ASCII-Zeichensatz , Codepages, EBCDIC usw.) zu überwinden, die entweder unzureichend waren oder untereinander inkompatibel waren. Heute ist er mit ISO/IEC 10646 synchronisiert, pflegt Algorithmen (wie den bidirektionalen) und definiert Eigenschaften und Normalisierungsregeln, damit alles konsistent funktioniert.
Was ist Unicode und warum ist es so wichtig?
Unicode ist ein universeller und sich ständig weiterentwickelnder Zeichenkodierungsstandard , der jedes Zeichen durch einen Namen, einen Codepunkt und eine Reihe von Eigenschaften (Schriftart, Kategorie, Schreibrichtung, Groß-/Kleinschreibung usw.) beschreibt. Das Unicode Technical Committee (UTC) innerhalb des Unicode-Konsortiums sorgt für die Synchronisierung mit dem ISO/IEC-10646-Standard.
Ziel ist Universalität, Einheitlichkeit und Einzigartigkeit : ein breites Repertoire, das den eindeutigen Austausch mehrsprachiger Texte mit klaren und reproduzierbaren Regeln ermöglicht. Dank dieser Möglichkeiten können moderne Technologien (Betriebssysteme, Browser, XML, Java, Datenbanken) lateinische und arabische Schriftzeichen, CJK-Ideogramme, Emojis sowie technische und musikalische Symbole innerhalb desselben Dokuments kombinieren.
Zeichen, Glyphen und Codepunkte
In Unicode ist ein Zeichen eine abstrakte Informationseinheit, und ein Codepunkt ist sein numerischer Bezeichner . Ein Glyphe ist die visuelle Darstellung (was auf dem Bildschirm erscheint) und hängt von der Schriftart ab . Ein einzelnes Zeichen kann mehrere Glyphen haben, und manchmal repräsentiert eine Glyphe mehr als ein Zeichen.
Die übliche Notation für einen Codepunkt ist U+XXXX in Hexadezimaldarstellung . Beispiele aus dem analysierten Material: Der Kleinbuchstabe 'l' ist U+006C, der vorkomponierte Kleinbuchstabe 'ü' ist U+00FC, das 'é' ist U+00E9 und das griechische Beta: der Großbuchstabe ist U+0392 und der Kleinbuchstabe ist U+03B2 (in einigen Texten wird 'β' mit U+0392 angegeben, aber dieser Code entspricht dem Großbuchstaben 'Β').
Der Unicode-Coderaum verfügt über 1.114.112 mögliche Positionen (bis zu U+10FFFF) , die so organisiert sind, dass sie alle Schriftsysteme und Symbole abdecken und klassifizieren, mit Zehntausenden von effektiven und stetig wachsenden Zuordnungen in jeder Version.
Pläne, Flächen und Blöcke
Unicode unterteilt seinen Zeichenraum in 17 Ebenen mit jeweils bis zu 65.536 Codepunkten . Diese Organisation erleichtert das Gruppieren verwandter Schriftsysteme und Symbole und ermöglicht ein schnelles Auffinden der gesuchten Informationen.
Die wichtigsten Ebenen : Die Basis-Mehrsprachige Ebene (BMP, Ebene 0) vereint fast alle modernen Alphabete und viele Symbole; die Ergänzende Mehrsprachige Ebene (SMP, Ebene 1) speichert historische Schriften und technische Symbole (z. B. musikalische und mathematische); die Ergänzende Ideografische Ebene (SIP, Ebene 2) erweitert die CJK-Ideogramme; Ebene 14 (SSP) enthält spezielle Bezeichnungen; und die Ebenen 15 und 16 sind für den privaten Gebrauch bestimmt.
Blöcke und Gebiete : Die Karten sind informell in Gebiete und formal in zusammenhängende Blöcke unterteilt. Blöcke dienen der Erfassung und Dokumentation von Zeichen, obwohl sie nicht immer sinnvollen sprachlichen Gruppierungen entsprechen.
CJK-Ideogramme und das Unihan-Projekt
Die ostasiatischen (Han-)Ideogramme sind in Unicode vereinheitlicht, wobei es regionale Stilvariationen gibt . Sie alle bezeichnen jedoch dasselbe abstrakte Zeichen. Ihre Verwaltung obliegt der Ideographic Rapporteur Group (IRG), einer ISO/IEC JTC1/SC2/WG2-Gruppe mit Vertretern aus China, Japan, Korea, Vietnam, Hongkong, Macau, Singapur, den USA und anderen Ländern.
Die Unihan-Datenbank vereint Hilfsinformationen (Lesungen, Bedeutungen, Äquivalenzen), die für den Umgang mit diesen Ideogrammen in verschiedenen Sprachen und historischen oder unternehmensinternen Standards unerlässlich sind.
Wichtigste CJK-Blöcke und Erweiterungen :
- Vereinheitlichte CJK-Ideogramme (BMP, U+4E00–U+9FFF): 20.992 häufig verwendete Zeichen.
- Erweiterung A (BMP, U+3400–U+4DBF): 6.592 weniger häufige Ideogramme.
- B–H-Erweiterungen: in SMP/SIP/TIP summieren sie sich auf Zehntausende mehr (B: U+20000–U+2A6DF, 42.720; C: U+2A700–U+2B73F, 4.154; D: U+2B740–U+2B81F, 222; E: U+2B820–U+2CEAF, 5.762; F: U+2CEB0–U+2EBEF, 7.473; G: U+30000–U+3134F, 4.939;
- Andere verwandte CJK-Blöcke: Kangxi-Radikale (U+2F00–U+2FDF), CJK-Symbole und -Satzzeichen (U+3000–U+303F), Kompatibilität und Kompatibilitätsformate, Ergänzung zum Kompatibilitätsideogramm usw.
Unicode geht davon aus, dass die Einbeziehung von Ideogrammen kein absolutes Ende haben wird und erwägt Mechanismen wie ideographische Beschreibungssequenzen, um nicht kodierte Symbole darzustellen, indem sie diese in bestehende Komponenten zerlegen (mit dem Hinweis: ohne kanonische Zerlegung oder Garantien bei Operationen wie Suchen oder Ordnen).
Kodierungsformen: UTF-8, UTF-16 und UTF-32
Unicode definiert Transformationsformen (UTF), die Codepunkte in Speichereinheiten umwandeln, damit Software Texte effizient entsprechend ihrem Kontext verarbeiten kann.
UTF-8 ist ein Byte-orientiertes Codierungsformat mit variabler Zeichenlänge, das im Bereich U+0000 bis U+007F mit ASCII kompatibel ist. Der aktuelle Standard verwendet 1 bis 4 Bytes pro Zeichen; ältere Texte sprechen von 1 bis 6 Bytes, im modernen Unicode sind es jedoch 1 bis 4. Es ist das vorherrschende Format im Web.
UTF-16 verwendet 16-Bit-Einheiten
(eine oder zwei Codeeinheiten pro Zeichen) : Die meisten BMP-Zeichen passen in eine Einheit; ergänzende Zeichen verwenden Ersatzpaare im Bereich U+D800–U+DFFF.
UTF-32 hat eine feste Länge: 4 Bytes pro Zeichen; es ist einfach, aber speicherintensiv; nützlich, wenn die direkte Zeichenindizierung wichtig ist und der Speicherplatz keine Rolle spielt.
Wie Bits in UTF-8 verteilt sind
Das UTF-8-Format verteilt die Codepunktbits in Sequenzen von 1 bis 4 Bytes mit erkennbaren Headern, wodurch Mehrdeutigkeiten vermieden und die Erkennung von Zeichengrenzen erleichtert wird.
| Unicode-Bereich | Bitmuster | Bytes |
|---|---|---|
| U+0000..U+007F | 0xxxxxx | 1 |
| U+0080..U+07FF | 110yyyyy 10xxxxxx | 2 |
| U+0800..U+FFFF | 1110zzzz 10yyyyyy 10xxxxxx | 3 |
| U+010000..U+10FFFF | 11110uuu 10uuuzzzz 10yyyyyy 10xxxxxx | 4 |
Ein wesentlicher Vorteil von UTF-8 besteht darin, dass es Probleme mit der Byte-Reihenfolge (Endianness) vermeidet und eine hocheffiziente Verarbeitung von Textströmen ermöglicht; außerdem ist es abwärtskompatibel mit ASCII.
Kodierungsschemata, Byte-Reihenfolge und BOM
Zusätzlich zu den UTF-Formen beschreibt Unicode Serialisierungsschemata , die festlegen, wie Bytes zwischen Systemen mit unterschiedlicher Byte-Reihenfolge übertragen werden und wie Aspekte wie die Byte-Reihenfolge signalisiert werden.
- UTF-8: Byte-Reihenfolge ist nicht anwendbar. Es kann durchgeführt werden Byte-Reihenfolge-Markierung (BOM) als Hinweis, obwohl dies standardmäßig weder erforderlich noch empfohlen wird.
- UTF-16: BE/LE-Varianten (Big/Little-Endian) und optionales BOM (falls fehlend und nicht durch das Protokoll definiert, wird Big-Endian angenommen).
- UTF-32: BE/LE-Varianten mit analogen Regeln; BOM als Bestellzeichen zulässig.
Darüber hinaus gibt es spezielle Varianten wie UTF-16BE/UTF-16LE und UTF-32BE/UTF-32LE (konventionsgemäß ohne BOM) sowie andere historische Kompatibilitätskodierungen wie UTF-7 oder UTF-EBCDIC, zusätzlich zu GB18030 (chinesisches Äquivalent zu UTF-8 mit Unterstützung für vereinfachtes und traditionelles Chinesisch).
Normalisierung, Zusammensetzung und Äquivalenzen
Viele Schriftzeichen lassen sich entweder als vorgefertigte Zeichen oder als Sequenzen aus Basis und Kombinationszeichen darstellen . Klassische Beispiele aus dem überarbeiteten Material: Das vorgefertigte „Ä“ ist U+00C4, die zerlegte Form lautet „A“ (U+0041) + Trema (U+0308). Das vietnamesische „ỗ“ kann als „o“ (U+006F) + Zirkumflex (U+0302) + Tilde (U+0303) dargestellt werden.
Unicode definiert standardisierte Formen und zwei Arten der Äquivalenz : kanonische Äquivalenz (gleicher inhaltlicher Inhalt) und Kompatibilitätsäquivalenz (Formen, die gleich aussehen, aber semantische Unterschiede aufweisen). Die Standardisierung gewährleistet einen zuverlässigen Zeichenkettenvergleich und reduziert Duplikate.
Bidirektionaler Algorithmus und Sonderzeichen
Für von rechts nach links geschriebene Schriften wie Arabisch oder Hebräisch verwendet Unicode einen standardisierten und sich weiterentwickelnden bidirektionalen Algorithmus (Bidi) (z. B. Überarbeitungen in 6.3), sodass gemischte Texte mit lateinischen und arabischen Zeichen in der richtigen visuellen Reihenfolge dargestellt werden.
Klassen von Codepunkten, die gemäß dem erhaltenen Material bekannt sein sollten: grafische Zeichen (Buchstaben, Zeichen, Symbole), Formatierungszeichen (unsichtbare Zeichen, die die Verarbeitung beeinflussen: U+2028 Zeilenumbruch, U+2029 Absatzumbruch, U+00A0 Leerzeichen), geerbte Steuerzeichen für Kompatibilität (Bereiche U+0000–U+001F, U+007F, U+0080–U+009F), private Verwendung, reservierte Positionen, Ersetzungen (U+D800–U+DFFF für UTF-16) und Nicht-Zeichen (U+FFFE, U+FFFF in jeder Ebene).
Unicode, ISO/IEC 10646 und andere Standards (ASCII, ANSI, Codepages)
Unicode ist mit ISO/IEC 10646 (UCS) synchronisiert und behält die Zuordnungen zu früheren Standards (ASCII, ISO 8859-1, ANSI Z39.64, JIS X 0208, KS X 1001, GB 2312, GB 18030, HKSCS, CNS 11643 usw.) bei und reserviert darüber hinaus Bereiche für die private Nutzung durch Hersteller.
ASCII vs. Unicode : ASCII ist ein 7-Bit-Zeichensatz mit 128 Zeichen , ausreichend für einfaches Englisch, aber unzureichend für Sprachen mit diakritischen Zeichen, Ideogrammen oder Emojis . Unicode umfasst über 140.000 Zeichen und wird stetig erweitert. Die Kodierung erfolgt mit 8, 16 oder 32 Bit gemäß dem UTF-12-Format.
ANSI und Codepages : „ANSI“ bezeichnet üblicherweise die eingeschränkten und untereinander inkompatiblen 8-Bit-Windows-Codepages. Ein Computer mit OEM-Latin II, der einen Text in IBM EBCDIC-Kyrillisch öffnet, zeigt fehlerhafte Zeichen an. Unicode löst dieses Problem durch einen einzigen Zeichensatz und verlustfreie Konvertierungen zwischen seinen eigenen Formen.
Implementierung auf Systemen (Windows, Solaris) und Konvertierung
Windows verwendet intern UTF-16 für seine modernen APIs und bietet Funktionen wie MultiByteToWideChar und WideCharToMultiByte zur Konvertierung zwischen Unicode und Codepages (SBCS/DBCS/MBCS). Bei einer erzwungenen Konvertierung in eine Codepage kann es zu Datenverlusten kommen, wenn diese nicht alle Zeichen darstellen kann.
Neue Anwendungen unter Windows sollten intern UTF-16 verwenden und die Konvertierung den Schnittstellen (E/A, Protokolle) überlassen, um Datenverluste zu minimieren. Dennoch wahrt Windows die Kompatibilität mit Codepages, wenn dies unvermeidbar ist.
Oracle Solaris 11 unterstützt laut der überarbeiteten Dokumentation Unicode 6.0 und ISO/IEC 10646:2011 auf Systemebene und verwendet UTF-8 als Standardformat in seinen Parametersätzen, wodurch Probleme mit der Byte-Reihenfolge vermieden und ASCII transparent erhalten wird.
Unicode in der Praxis: Web, Dokumente und Programmierung
Im Web ist es üblich, Inhalte in UTF-8 bereitzustellen und zu speichern . In HTML deklarieren Sie '<meta charset="UTF-8">', um Kompatibilität zu gewährleisten, und verwenden Sie gegebenenfalls hexadezimale numerische Entitäten (Beispiel: das Euro-Zeichen '€').
In Word können Sie Unicode-Symbole ganz einfach einfügen, indem Sie den Cursor an die entsprechende Stelle setzen, auf „Einfügen“ > „Symbol“ klicken oder den Code eingeben und Alt+X drücken. Dadurch wird der Wert gemäß den Standardverfahren in das entsprechende Zeichen umgewandelt. Eine Liste der Alt-Codes zum Einfügen von Symbolen über die Tastatur finden Sie hier.
In Programmiersprachen : In Python 3 sind Zeichenketten bereits Unicode; in Java und C# kann man Escape-Zeichen wie '\uXXXX' verwenden; in HTML '&#xXXXX;'. Wichtig ist, dass Bearbeitung, Kompilierung und Übertragung dieselbe Kodierung verwenden, um Fehler zu vermeiden.
Das Kopieren und Einfügen von Symbolen funktioniert, wenn die gesamte Zeichenkette in Unicode vorliegt . Verwendet ein Teil der Zeichenkette eine andere Kodierung, können Fragezeichen, Quadrate oder andere Sonderzeichen erscheinen.
Zeichendatenbank (UCD), Eigenschaften und Kategorien
Die Unicode-Zeichendatenbank (UCD) veröffentlicht für jeden Codepunkt dessen Namen, Kategorie, Schriftsystem, Groß-/Kleinschreibung, Schreibrichtung und weitere Merkmale . Diese Informationen sind unerlässlich für die korrekte Funktion von Rendering-Engines und Textverarbeitungsprozessen.
Dank dieser Eigenschaften können verschiedene Komponenten und Algorithmen (wie Sortierung, Wortsegmentierung oder Umwandlung in Groß- und Kleinbuchstaben) mit denselben Daten konsistent arbeiten.
Versionen und Erweiterungen des Standards: Highlights
Unicode wächst mit jeder Version und integriert neue Schriftsysteme, Symbole und Emojis. Zu den wichtigsten Meilensteinen zählen Version 1.0 aus dem Jahr 1991 mit 7.161 Zeichen sowie die nachfolgenden Erweiterungen, die Tausende neuer Symbole, Ideogramme, Emojis und Schriftsysteme hinzugefügt haben.
Beispielsweise wurden in Version 15.0 im Jahr 2022 4.192 zusätzliche CJK-Ideogramme und andere Elemente hinzugefügt, sodass nun ungefähr 149.186 Zeichen verfügbar sind.
Tools zum Erkunden der Unicode-Tabelle
Es gibt kostenlose Tools zum Suchen und Analysieren von Zeichen : Unibook Character Browser, SYMBL und Branah.com ermöglichen es, Eigenschaften, Namen und Zeichenblöcke abzufragen, was es Entwicklern und Content-Erstellern erleichtert, die benötigten Informationen schnell zu finden.
Anwendungsfälle: Adressformulare, Internationalisierung und Business
Die Möglichkeit für Nutzer, Adressen in ihrer eigenen Sprache und Schrift einzugeben, trägt zur Fehlerreduzierung und Verbesserung der Benutzerfreundlichkeit bei. Darüber hinaus verhindert die Unicode-Interoperabilität Konvertierungsprobleme zwischen verschiedenen Systemen und gewährleistet so die Textintegrität entlang der gesamten digitalen Kette.
Aus diesem Grund ist Unicode das grundlegende Element, das sicherstellt, dass der Text in der gesamten digitalen Infrastruktur – von Webformularen über Datenbanksysteme bis hin zu gedruckten Dokumenten – endgültig bleibt, unabhängig davon, ob man im selben Satz 'ñ', Arabisch, Chinesisch oder Emojis verwendet.