В моем случае все команды работают. Возможно, вы можете указать свою среду.
$ echo "\#\!"
\#\!
$ echo "#!"
echo "#"
#
$ echo "#!"
echo "#"
#
$ echo $BASH_VERSION
3.2.48(1)-release
Я думаю, что Ваши опции - что-то как:
первые два являются большим количеством тяжеловеса, учитывая, что они разработаны для парсинга плохо сформированного HTML. Если Вы будете знать, что проблемы происходят из-за кодирования и объектов, но иначе хорошо сформировались, то я предложу Вас самокрутка:
Кажется, что необходимо выяснить, существует ли способ автоматически убрать данные сами перед передачей к синтаксическому анализатору. Как определенные недопустимые символы, не допустимый в заявленном наборе символов или незавершенных метасимволах XML, таких как '<';?
Для незаявленных объектов, я когда-то решил это путем конфигурирования синтаксического анализатора SAX с обработчиком ошибок, который в основном проигнорировал эти ошибки. Это могло бы помочь Вам также. См. ErrorHandler API.
Для недопустимых символов я бы рекомендовал реализовать фильтрацию Reader; просто преобразуйте их (предполагая, что это управляющие символы) с пробелом или вычеркните.
Необъявленные сущности сложнее; некоторые синтаксические анализаторы xml позволяют вам определять альтернативное DTD для использования (по крайней мере, Woodstox . Если да, то вы можете внедрить DTD, который действительно объявляет нужные вам объекты.