Почему нулевой символ запрещен даже в разделах CDATA?

XML, почему нулевой символ запрещен даже в разделах CDATA?

Кажется, файл тут же завершается.

Любое решение? База64?


person Robin Rodricks    schedule 02.02.2009    source источник
comment
Хороший вопрос, не могу придумать ничего, кроме base64 (или какого-то разделителя).   -  person Srikanth    schedule 02.02.2009
comment
Мне очень любопытно, почему вы хотите иметь нули внутри XML? Меня поражает, когда я вижу бинарные потоки внутри XML.   -  person Joao da Silva    schedule 02.02.2009
comment
@João: потому что он хочет передавать двоичные данные в старых версиях Flash без накладных расходов base64 - см. stackoverflow.com/questions/502857/   -  person Christoph    schedule 02.02.2009
comment
Потому что вы можете захотеть отправить произвольные двоичные данные, например, через веб-службу. У меня есть код сообщения об ошибке, который вызывает веб-службу, чтобы сообщить об ошибке, а также (необязательно) отправляет двоичный файл, над которым работало приложение в то время. Делает отладку сбоев моих пользователей намного проще.   -  person andynormancx    schedule 02.02.2009


Ответы (3)


Вы можете найти ответ в этом предыдущем вопросе:

Почему управляющие символы недопустимы в XML 1.0?

person null    schedule 02.02.2009

Потому что это не допустимый символ XML, т.е. он должен выдавать ошибку синтаксического анализа. Вероятно, это связано с историческими причинами (строки с завершающим нулем) и из-за того, что XML представляет собой простой текст: все, что может захлебнуться редактором с поддержкой Unicode, не рекомендуется...

person Christoph    schedule 02.02.2009

Он не должен «завершать файл», но должен генерировать ошибку правильности. Это запрещено, потому что большая часть мира все еще использует обработку строк с завершающим нулем, поэтому разрешение \0 может вызвать проблемы в какой-то неуказанной точке цепочки обработки.

Возможно, это даже может быть уязвимостью системы безопасности; в прошлом было много эксплойтов, которые полагались на взаимодействие систем, которые разрешают \0, и тех, которые принимают его как терминатор. Поэтому безопаснее всего просто запретить это.

Другие управляющие символы можно экранировать как &#...; ссылки на символы в других местах XML 1.1, но не в разделах CDATA. В XML 1.0 вообще нет возможности вводить управляющие символы. В конце концов, это должен быть текстовый, удобочитаемый формат.

База64?

Да. Но если вы обрабатываете в основном большие фрагменты двоичных файлов, инкапсуляция их в XML, вероятно, не является разумным выбором.

person bobince    schedule 02.02.2009
comment
С другой стороны, если вам необходимо хранить большие фрагменты двоичных данных в XML-документе, для этого подойдет кодировка base 64. - person Robert Rossney; 03.02.2009