Вероятно, пришло время подвести итог, также с точки зрения XML 1.1.
Какие точки кода управляющего символа есть в Unicode?
U+0000
до U+001f
, унаследовано от ASCII.
U+007F
, унаследовано от ASCII
U+0080
до U+009F
, унаследовано от Latin-1
- различные диапазоны специального назначения, явно стандартизированные для Unicode, и в основном полезные, особенно в контекстах без разметки. Они обсуждаются здесь блок за блоком, включая причины, почему и как использовать их или не использовать их в XML и что делать, если вы все равно столкнетесь с ними.
Как XML смотрит на эти управляющие символы?
Это другая классификация.
- Tab и новая строка (независимо от зависимости новой строки от платформы) хороши. Все используют их. Все знают, за что они должны стоять. Допускается почти во всех известных формах, часто даже для красивой печати самой разметки.
U+0000
это зло. Нулевой персонаж? Строковый терминатор? Бинарный шум? Противоположность как совместимости, так и разметке. Запрещено во всех формах.
- Что-нибудь еще? Вряд ли используется проблематичная совместимость, но есть способы терпеть их, даже не зная, что они должны «контролировать».
Давайте теперь переключим наше внимание только на эту последнюю категорию, собственно коды управления. То есть следующая сводка НЕ применяется к вкладкам и новым строкам: U+0009
, U+000a
, U+000D
, U+0085
, U+2028
.
XML 1.0 допускает все вышеперечисленные диапазоны управляющих символов, кроме U+0000
до U+001f
, как текст (непосредственно включенные символы) и как числовые ссылки на символы . Разрешение от U+007F
до U+009F
было , по-видимому, по пропущению, и это несоответствие было исправлено в XML 1.1, но наоборот. Они даже дали подробное обоснование в стандарте:
Наконец, существует значительная потребность в определении стандартного представления произвольных символов Юникода в документах XML. Следовательно, XML 1.1 позволяет использовать символьные ссылки на управляющие символы с # x1 по # x1F, большинство из которых запрещено в XML 1.0. Однако из соображений надежности эти символы по-прежнему нельзя использовать непосредственно в документах. Чтобы повысить надежность обнаружения кодировки символов, дополнительные управляющие символы с # x7F по # x9F, которые были свободно разрешены в документах XML 1.0, теперь также должны появляться только как ссылки на символы. (Пробельные символы, конечно, освобождаются.) Незначительная жертва обратной совместимости считается несущественной. Из-за потенциальных проблем с API, # x0 по-прежнему запрещен как напрямую, так и в качестве ссылки на символ.
Почему Unicode и XML позволяют бесплатно использовать управляющие символы, подобные разметке, кроме нескольких «унаследованных» диапазонов? Люди должны использовать разметку для тех.
Юникод также используется в контекстах без разметки, и это все еще развивающийся набор символов. Было бы слишком сложно реализовать соответствующий процессор XML, если бы набор неуправляемых символов был движущейся целью.
Хорошо, что тогда не так с унаследованными диапазонами, по сравнению с управляющими символами Unicode?
Отсутствие стандартизации. Консорциум Unicode на самом деле не смог выбрать, какие номера присваивать этим «персонажам», или каково их типичное визуальное представление или значение. Полная обратная совместимость с ASCII (на уровне кодированного UTF-8) и с Latin-1 (на уровне назначения кодовой точки) вынудила необработанное включение этих кодовых точек независимо от различных специализированных и перегруженных значений, часто присущих им в различных контекстах обработки текста.
Подождите, вы говорите, что XML не предназначен для полной обратной совместимости с ASCII, в отличие от UTF-8?
Да. Правильно. Вам нужен элемент документа. Вы не можете даже положить в сыром <
или &
. Так зачем вам вообще вводить необработанные управляющие символы?