Определения сущностей не разрешены в разделах CDATA, поэтому ваш оригинальный пример не работает. То, что модифицированный пример не работает, по-моему, является ошибкой SAX-парсера. Возможно, синтаксический анализатор SAX не разрешает невидимую метку порядка байтов (BOM) до пролога XML, начинающегося с <?, Но парсер SAX должен. </p>
Чтобы помочь синтаксическому анализатору SAX, в конечном итоге подойдет следующий обходной путь. А именно, потребляет спецификацию перед тем, как кормить анализатор. Вы можете использовать маркируемый поток для этой цели, то есть пометить поток, прочитать спецификацию, сбросить поток до его метки, если не было спецификации. Я не пытался, это только предположение.
Кстати: ваш вопрос был бы лучше воспринят, если бы вы исправили опечатку во вступлении: напишите «ссылка на символ» вместо «ссылка на символ». Сначала я подумал, что пропущенный a связан с вашим вопросом.