Как работать с управляющими кодами (то есть 'C0' U+0000-U+001F и 'C1' U+007F-U+009F диапазоны) в XML, XHTML и HTML?
Устаревшие программы иногда создают данные, которые отображают управляющие коды. Поэтому иногда может быть важным понять, как поддерживаются контрольные коды в языках разметки, при переносе таких приложений или их данных в Интернет.
Есть два диапазона Unicode Character Set (Набора Символов), предназначенные как управляющие коды. Стандарт Unicode не позволяет особого использования этих управляющих кодов и оставляет их определение для приложения. Если программа не определяет их использования, то они должны быть интерпретированы согласно семантики ISO/IEC 6429. Большинство из вас узнают многие из 6429 управляющих кодов: ACK, NAK, BEL, LF, FF, VT, CR, и другие. ISO 8859 и другие символьные стандарты базируют свои управляющие коды на стандарте ISO 6429.
Управляющие коды в диапазоне U+0000-U+001F известны как "C0" диапазон. Этот диапазон начинается с NUL (Null) U+0000. Управляющие коды в диапазоне U+0080-U+009F известны как "C1" диапазон. DEL (Delete) U+007F также управляющий код и примыкает к началу Диапазона C1.
Управляющие коды должны быть заменены на соответствующую разметку. Поскольку XML обеспечивает стандартный способ кодирования структурированных данных, при представлении управляющих кодов отличающихся от разметки будут отменены фактические преимущества использования XML. Не нужно использовать управляющие коды в HTML и XHTML, так как эти языки разметки созданные для представления текста, а не данных. Такая информация должна пригодиться лишь в одном редком случае, когда устаревшие данные, содержащие управляющие коды нельзя очистить.
Если данные в действительности не текстовые, а бинарные, то более практичным может быть, закодировать их, например, с использованием base64 (позиционная система исчисления с основой 64) или шестнадцатеричных значений, для обеспечения использования только поддерживаемых символов в тексте языка разметки. (И, конечно, декодирование текста при чтении файлов.) Обратите внимание, что Схема XML обеспечивает типы данных для этих кодировок.
Другая альтернатива - сохранять данные во внешнем документе и ссылаться на него из документа XML.
Если вам необходимо представить контрольный код в XML 1.1, то явно простейшей альтернативой является использование NCR (числовая ссылка). Например, управляющий код ESC (Escape) U+001B будет представлен или  (шестнадцатеричными) или  (десятичными) Числовыми Ссылками.
Ниже приводится таблица, которая суммирует какие языки разметки поддерживают управляющие коды:
Управляющие коды | Диапазон | HTML 4 | XHTML 1.0 | XML 1.0 | XML 1.1 |
---|---|---|---|---|---|
C0, за исключением HT, LF, CR | U+0000 (NUL) | Не разрешено | Не разрешено | Не разрешено | Не разрешено |
U+0001-U+001F | Не разрешено | Не разрешено | Не разрешено | NCR | |
HT, LF, CR | U+0009, U+000A, U+000D | Поддерживается | Поддерживается | Поддерживается | Поддерживается |
DEL + C1 | U+007F-U+009F | Не разрешено | Не разрешено | Поддерживается | NCR |
NEL | U+0085 | Не разрешено | Не разрешено | (допускается) | Поддерживается |
Управляющий код NUL (Null) не разрешен и не может быть представлен NCR или закодирован прямо в языках разметки.
HTML, XHTML и XML 1.0 не поддерживают диапазон C0, за исключением HT - Horizontal Tabulation (горизонтальная табуляция) U+0009, LF - Line Feed (разрыв строки) U+000A, и CR - Carriage Return (возврат в начало строки) U+000D. Диапазон C1 поддерживается, то есть вы можете кодировать непосредственно управляющие коды или представлять их как NCRs (Числовые Ссылки).
XML 1.1 ограничивает диапазон C1, за исключением NEL U+0085 (Новой линии EBCDIC), так же, как диапазон C0. Однако, XML 1.1 позволяет представлять управляющие коды при помощи NCRs (Числовых Ссылок).
В то время как ISO 8859 зарезервировала диапазон C1 для управляющих кодов, наборы символов Microsoft (например 1250-1258) поставили символы в этот диапазон. Иногда авторы контента ошибочно используют code points (точки кода) символов Microsoft при создании NCRs вместо того, чтобы использовать значение Unicode. Из-за распространенности данной ошибки, многие браузеры отображают символы Microsoft в этом диапазоне. Это некорректное поведение и в дальнейшем вводит разработчика в заблуждение неправильным подтверждением ошибочного значения. В конечном итоге проблему можно обнаружить, когда данные обрабатываются некоторыми программами, или когда отвечающий стандартам браузер не может отобразить назначенный символ.
Более подробная информация о диапазоне C0 доступна в Unicode Таблица Кодирования: C0 Управляющие коды и Основной Латинский Язык
Более подробная информация о диапазоне C1 доступна в Unicode Таблица Кодирования: C1 правляющие коды и Дополнения Latin-1
Документ Unicode в XMLи других Языках Разметки содержит указания по использованию стандарта Unicode в сочетании с такими языками разметки, как XML.