# Steuerzeichen in Unicode

Steuerzeichen im Unicode sind selbst nicht darstellbare Zeichen, beeinflussen aber die Darstellung und Formatierung der anderen Zeichen. Da Unicode eine Vielzahl verschiedener Schriftsysteme kodiert, die bestimmte Anforderungen an eine optimale Darstellung stellen, ist es in einigen Fällen notwendig, durch solch unsichtbare Steuerzeichen die Darstellungsalgorithmen zu beeinflussen.
Mit Steuerzeichen kann zum Beispiel die Darstellung von Ligaturen beeinflusst werden. Je nachdem ob ein Programm diese automatisch vorsieht oder nicht, kann es in einigen Fällen notwendig werden, mittels bestimmter Steuerzeichen eine Verbindung zweier Buchstaben zu einer Ligatur zu fordern oder eine solche zu verhindern.

## Allgemeine Eigenschaften von Steuerzeichen

Die meisten Steuerzeichen sind durch die allgemeine Kategorie als solche gekennzeichnet, wobei es einige Ausnahmen gibt. Hier steht der Wert Cc für allgemeine, Cf für Formatierungs-Steuerzeichen. Viele Steuerzeichen sind außerdem als default ignorable gekennzeichnet, dies bedeutet, dass Programme, die diese Zeichen nicht korrekt verarbeiten können, sie nicht beachten sollten.

## Steuerzeichen-Bereiche C0 und C1

Als C0-Bereich [c-null] gelten die Zeichen von U+0000 bis U+001F (dezimal 0–31) und U+007F (dezimal 127), als C1-Bereich gelten die von U+0080 bis U+009F (dezimal 128–159). Als Obermenge von ASCII und Latin-1 übernimmt Unicode die C0- und C1-Steuerzeichen dieser Standards, ohne sie mit einer eigenen Interpretation zu belegen. Lediglich einige dieser Zeichen haben eine im Unicode-Standard definierte Funktion, zu diesen zählen insbesondere die Zeichen zum Zeilenumbruch.

## Umbruch

Für den Zeilenumbruch und die Aufteilung eines Textes in einzelne Zeichen, Wörter oder Sätze gibt es den Unicode-Zeilenumbruch-Algorithmus und eine Reihe von Segmentierungsalgorithmen. Neben den klassischen Steuerzeichen zum erzwungenen Zeilenende gibt es auch Steuerzeichen, die verwendet werden können, um diesen Algorithmen zu signalisieren, an welchen Stellen im Text kein Umbruch erfolgen darf und an welchen er zusätzlich möglich sein soll.
Um einen Umbruch zu verhindern, wird meist der Wortverbinder (U+2060) genutzt, sofern es nicht wie beim Leerzeichen eine eigene nicht-umbrechende Variante gibt. Vor der Einführung dieses Steuerzeichens in Unicode 3.2 wurde das breitenlose nichtumbrechende Leerzeichen (U+FEFF) dazu verwendet, das aber heute hauptsächlich in seiner Funktion als Bytereihenfolgezeichen genutzt wird.
Um umgekehrt einen Umbruch zu erlauben, wird das breitenlose Leerzeichen (U+200B) oder der bedingte Trennstrich (U+00AD) verwendet.
Für Zeilen- und Absatzende existieren in Unicode außerdem die Zeichen Zeilentrenner (U+2028) und Absatztrenner (U+2029), die im Gegensatz zu den meisten anderen Steuerzeichen in ihrer allgemeinen Kategorie als Leerraum gekennzeichnet sind.

## Schreibschrift und Ligaturen

In einigen Schriftsystemen, wie dem Arabischen, werden die Zeichen innerhalb eines Wortes mit den Nachbarzeichen verbunden, was bedeutet, dass ein Zeichen je nach Stellung ein unterschiedliches Aussehen haben kann. Ebenso ist es möglich, dass zwei benachbarte Zeichen durch eine einzelne Ligatur dieser Zeichen dargestellt werden soll. Um in solchen Fällen die Verbindung zweier benachbarter Zeichen zu erzwingen oder zu verhindern, definiert der Unicode-Standard Steuerzeichen, die die entsprechenden Algorithmen beeinflussen.
Dies sind der Bindehemmer (U+200C) und der breitenlose Verbinder (U+200D).

## Combining Grapheme Joiner

Formal kein Steuerzeichen, sondern ein kombinierendes Zeichen ist der Combining Grapheme Joiner (CGJ; U+034F), das verwendet werden kann, um die Darstellung diakritischer Zeichen und die Sortierung von Digraphen mittels des Unicode Collation Algorithm zu beeinflussen.

## Bidirektionale Texte

Für bidirektionale Texte existieren eine Reihe spezieller Steuerzeichen, die eine bestimmte Schreibrichtung erzwingen und so auf die Darstellung Einfluss nehmen können.

## Veraltete Formatierungszeichen

Einige Steuerzeichen sind als deprecated markiert, von ihrer Verwendung wird abgeraten. Dies sind die folgenden Zeichen:
U+206A (symmetrische Spiegelung verhindern) und U+206B (symmetrische Spiegelung aktivieren) deaktivieren bzw. aktivieren das normale Verhalten, dass spiegelbare Zeichen (etwa Klammern) in linksläufigen Text bei der Anwendung des Unicode-Bidi-Algorithmus gespiegelt dargestellt werden.
U+206C (arabische Formgebung verhindern) und U+206D (arabische Formgebung aktivieren) deaktivieren bzw. aktivieren das normalerweise deaktivierte Verhalten, arabische Kompatibilitätszeichen für bestimmte Zeichenformen durch die im jeweiligen Kontext eigentlich korrekte Form zu ersetzen.
U+206E (nationale Ziffernformen) und U+206F (nominale Ziffernformen) aktivieren bzw. deaktivieren eine sonst nicht durchgeführte Ersetzung der gewöhnlichen Ziffern 0 bis 9 bei der Ausgabe durch die in der Sprache des Benutzers üblichen (arabisch-indisch etc.).

## Variantenselektoren

Variantenselektoren bieten die Möglichkeit, auch in reinem Text ohne Metainformationen zur gewünschten Schriftart bestimmte Glyphenvarianten für die Ausgabe zu verwenden. Formal sind Variantenselektoren kombinierende Zeichen, folgen also direkt auf das Zeichen, für das sie eine bestimmte Formvariante auswählen. Es sind 259 verschiedene solche Variantenselektoren definiert: U+180B bis U+180D sind für die Verwendung mit mongolischen Zeichen vorgesehen, U+FE00 bis U+FE0F und U+E0100 bis U+E01EF für allgemeine Zeichen. Welche Änderungen die Variantenselektoren genau hervorrufen, wird in zwei Dokumenten spezifiziert, in der Unicode Ideographic Variation Database und der Datei StandardizedVariants.txt. Beispielsweise legt der Variantenselektor U+FE00, wenn er dem Vereinigungszeichen U+222A folgt, fest, dass dieses mit Serifen dargestellt werden soll.

## Gesperrte Codepunkte

Einige Codepunkte sind dauerhaft gesperrt und werden niemals mit einem Zeichen belegt. Neben den beiden letzten Codepunkten einer jeden Ebene (U+FFFE, U+FFFF, U+1FFFE, U+1FFFF, …, U+10FFFE, U+10FFFF) sind dies die Zeichen im Bereich U+FDD0 bis U+FDEF. Die Bytefolge FFFE muss als Bytereihenfolgezeichen (U+FEFF) frei bleiben, um die Bytefolge des Datenstroms erkennen zu können, und die Bytefolge FFFF (alle 16 Bit gesetzt) ist bei diversen Datenübertragungen nicht von einem fehlenden Signal zu unterscheiden. Die anderen Codepunkte entsprechen Bitfolgen, welche für codeinterne Zwecke benötigt werden. Bei diesen Codepunkten handelt es sich also nicht um Steuerzeichen im engeren Sinn und Programme können diese Codepunkte intern beliebig verwenden (wie private), aber zur Übertragung und Darstellung von Zeichen sind sie nicht geeignet. Sie sind nicht zu verwechseln mit gegenwärtig unbelegten Codepunkten, denen jedoch in späteren Versionen ein Zeichen zugewiesen werden könnte.

## Bytereihenfolgezeichen

Neben seiner ursprünglichen Bedeutung für den Umbruch hat das Zeichen U+FEFF inzwischen die Aufgabe, als Bytereihenfolgezeichen (Byte Order Mark) die Byte-Reihenfolge eines Textes anzugeben und eine automatische Bestimmung der Codierung zu erleichtern.

## Anmerkungszeichen

Die Zeichen im Bereich von U+FFF9 bis U+FFFB aus dem Unicodeblock Spezielles ermöglichen es Anmerkungen in den Text einzufügen, die meist über dem annotierten Text dargestellt werden. Sie ermöglichen es etwa Furigana-Zeichen als solche zu kennzeichnen. Dabei leitet U+FFF9 (Interlinearer Anmerkungsanker) den annotierten Text ein, U+FFFA (Interlinearer Anmerkungsteiler) trennt diesen von der ihm folgenden Anmerkung, U+FFFB (Interlineares Anmerkungsschlusszeichen) kennzeichnet das Ende der Anmerkung.

## Veraltete Tags

Der Unicodeblock Tags (U+E0000 bis U+E007F) enthält Zeichen, die ursprünglich dazu gedacht waren, Sprache und andere Metainformationen in reinem Text durch Tags zu übermitteln. Diese Zeichen sind inzwischen zu Gunsten von höheren Protokollen wie XML missbilligt. 95 dieser Zeichen entsprechen den druckbaren Zeichen des ASCII-Standards, dazu kommen noch einige weitere Zeichen, die den Typ der Metainformation oder das Ende ihrer Wirkung festlegen. So legt die Folge <U+E0001, U+E006A, U+E0061> fest, dass der folgende Text Japanisch ist: U+E0001 leitet Sprachkennzeichnungen ein, die beiden nächsten Zeichen können (nachdem E0000$_{16}$ subtrahiert wurde) wie in ASCII als ja gelesen werden, der ISO-639-Sprachcode für Japanisch.