Frage
Wie handhabt man Steuerzeichen – zum Beispiel die »C0«- (U+0000–U+001F) und »C1«-Bereiche (U+007F–U+009F) – in HTML, XHTML und XML?
Hintergrund
Alte Anwendungen erzeugen manchmal Daten, die Steuer- bzw. Kontrollzeichen beinhalten. Es kann deshalb wichtig sein, zu verstehen, wie diese Zeichen in Markup-Sprachen unterstĂĽtzt werden, wenn solche Anwendungen oder ihre Daten ins Web migriert werden.
Es gibt zwei Bereiche des Unicode Character Sets, denen Steuerzeichen zugewiesen sind. Der Unicode-Standard macht keinen besonderen Gebrauch von diesen Steuerelementen und überlässt ihre Definition der jeweiligen Applikation. Wenn eine Anwendung den Gebrauch der Steuerzeichen nicht spezifiziert, sind sie entsprechend ISO/IEC 6429 zu interpretieren. Viele von Ihnen werden einige der 6429-Codes kennen: ACK, NAK, BEL, LF, FF, VT, CR &c. Die ISO-8859-Familie und andere Zeichenstandards fußen ihre Steuerzeichen auf dem ISO-6429-Standard.
Die Steuerzeichen im Bereich U+0000–U+001F sind als »C0«-Bereich bekannt. Dieser Wertebereich beginnt mit dem NUL-Steuerelement U+0000 (Null). Die Steuerzeichen im Bereich U+0080–U+009F sind als »C1«-Bereich bekannt. DEL U+007F (»Delete«) ist ebenfalls ein Steuerelement, und es grenzt an den Anfang des C1-Bereichs an.
Antwort
Steuerzeichen handhaben
Steuerzeichen sollten durch passendes Markup ersetzt werden. Da XML einen Standardweg bietet, strukturierte Daten zu kodieren, würde die Angabe von Steuerzeichen in anderer Form als Markup die Vorteile von XML zunichte machen. Der Gebrauch von Steuerzeichen in HTML und XHTML ist nie zu empfehlen, da diese Markup-Sprachen dafür da sind, Text darzustellen, keine Daten. Die folgenden Informationen sollten nur in dem seltenen Fall gebraucht werden, in dem alte Daten, die Steuerzeichen beinhalten, nicht bereinigt werden können.
Wenn Daten nicht rein textlich, sondern binär sind, kann es geeigneter sein, sie zu kodieren, zum Beispiel über Base64 oder hexadezimale Werte, um sicherzustellen, dass im Markup-Text nur unterstützte Zeichen verwendet werden. (Und um diese selbstverständlich zu dekodieren, wenn die Dateien gelesen werden.) Beachten Sie, dass XML Schema Datentypen für diese Kodierungen bietet.
Eine weitere Alternative ist, die Daten in einem externen Dokument zu speichern und aus einem XML-Dokument zu referenzieren.
In XML 1.1 stellt der Gebrauch von NCRs (»Numeric Character References«) die einfachste Lösung dar, wenn Sie Steuerzeichen explizit angeben wollen. So würde das Steuerelement ESC U+001B (»Escape«) beispielsweise entweder durch die NCRs »« (hexadezimal) oder »« (dezimal) wiedergegeben werden.
UnterstĂĽtzung von Steuerzeichen
Die folgende Tabelle fasst zusammen, welche Markup-Sprachen Steuerzeichen unterstĂĽtzen:
Steuerzeichen | Bereich | HTMLÂ 4 | XHTMLÂ 1.0 | XMLÂ 1.0 | XMLÂ 1.1 |
---|---|---|---|---|---|
C0 (außer HT, LF, CR) | U+0000 (NUL) | unzulässig | unzulässig | unzulässig | unzulässig |
U+0001–U+001F | unzulässig | unzulässig | unzulässig | NCR | |
HT, LF, CR | U+0009, U+000A, U+000D | unterstĂĽtzt | unterstĂĽtzt | unterstĂĽtzt | unterstĂĽtzt |
DEL + C1 | U+007F–U+009F | unzulässig | unzulässig | unterstützt | NCR |
NEL | U+0085 | unzulässig | unzulässig | (zulässig) | unterstützt |
-
Das NUL-Steuerelement (Null) ist unzulässig und kann nicht durch eine NCR dargestellt oder direkt in einer Markup-Sprache kodiert werden.
-
HTML, XHTML und XML 1.0 unterstützen den C0-Bereich nicht, mit Ausnahme von HT U+0009 (horizontale Tabellierung), LF U+000A (Zeilenvorschub) und CR U+000D (Schreibkopfrücklauf). Der C1-Bereich wird hingegen unterstützt, das heißt, Sie können die entsprechenden Steuerzeichen direkt kodieren oder als NCRs darstellen.
-
XML 1.1 schränkt sowohl den C0- als auch den C1-Bereich ein, ausgenommen NEL U+0085 (neue Zeile nach EBCDIC). XML 1.1 erlaubt jedoch, diese Codes als NCRs darzustellen.
Ăśbrigens
Auch wenn die ISO-8859-Familie den C1-Bereich für Steuerelemente reserviert, sehen Microsoft-Zeichensätze (zum Beispiel 1250–1258) in diesen Bereichen Zeichen vor. Manchmal verwenden Autoren irrtümlicherweise die Microsoft-Code-Punkte, um NCRs zu kreieren, anstelle von Unicode-Werten. Viele Browser stellen aufgrund der Verbreitung dieses Fehlers in diesem Bereich die Microsoft-Zeichen dar. Diese Verhaltensweise ist jedoch nicht korrekt und führt Entwickler zudem in die Irre, indem sie den falschen Wert irrtümlicherweise bestätigt. Das Problem mag vielleicht nur entdeckt werden, wenn die Daten von irgendeiner Anwendung als fehlerhafte Zeichen und nicht als Steuerelemente behandelt werden, oder wenn ein standardkonformer Browser die Zeichen nicht wie beabsichtigt darstellen kann.
Literaturhinweise
-
Weitere Informationen zum C0-Bereich sind in der Unicode-Zeichentabelle zu C0-Steuerelementen und einfachem Latein verfĂĽgbar.
-
Weitere Informationen zum C1-Bereich sind in der Unicode-Zeichentabelle zu C1-Steuerelementen und Latin-1-Ergänzungen verfügbar.
-
Das Dokument Unicode in XML and Other Markup Languages beinhaltet Richtlinien zum Gebrauch des Unicode-Standards in Verbindung mit Markup-Sprachen wie XML.