Он не должен «завершать файл», но должен генерировать ошибку правильной формы. Это запрещено, потому что большая часть мира все еще использует обработку строк с нулевым символом в конце, поэтому допущение \ 0 может вызвать проблемы в некоторой неопределенной точке цепочки обработки.
Это может быть даже уязвимостью в безопасности; в прошлом было много эксплойтов, основанных на взаимодействии систем, которые допускают \ 0, и тех, которые принимают его как терминатор. Поэтому самое безопасное - просто запретить это.
Другие управляющие символы могут быть экранированы как & # ...; ссылки на символы в других местах в XML 1.1, но не в разделах CDATA. В XML 1.0 нет никакого способа получить управляющие символы вообще. В конце концов, это должен быть текстовый, понятный человеку формат.
Base64
Да. Но если вы обрабатываете в основном большие куски двоичного файла, инкапсуляция его в XML, вероятно, не является разумным выбором.