HTML, XHTML, XML и Управляющие Коды

Вопрос

Как работать с управляющими кодами (то есть '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 Не разрешено Не разрешено (допускается) Поддерживается

Кстати говоря

В то время как ISO 8859 зарезервировала диапазон C1 для управляющих кодов, наборы символов Microsoft (например 1250-1258) поставили символы в этот диапазон. Иногда авторы контента ошибочно используют code points (точки кода) символов Microsoft при создании NCRs вместо того, чтобы использовать значение Unicode. Из-за распространенности данной ошибки, многие браузеры отображают символы Microsoft в этом диапазоне. Это некорректное поведение и в дальнейшем вводит разработчика в заблуждение неправильным подтверждением ошибочного значения. В конечном итоге проблему можно обнаружить, когда данные обрабатываются некоторыми программами, или когда отвечающий стандартам браузер не может отобразить назначенный символ.