Проверьте файл в шестнадцатеричном редакторе.
Если за начальными байтами действительно стоит \xEF\xBB\xBF
, за которым следует сам документ, то это искусственная спецификация UTF-8. Хотя поддельные спецификации UTF-8 являются грубым заблуждением и инструменты, которые их генерируют, должны быть уничтожены специальной кислотой программирования, спецификация XML требует синтаксических анализаторов для распознавания и игнорирования этой последовательности байтов, так что если ваш SAX-анализатор SAX Разве это не соответствует требованиям и нуждается в ударе ногой.
Если начальные байты, которые дают вам 
, на самом деле похожи на один из:
\xC3\xAF\xC2\xBB\xC2\xBF
\xEF\xBB\xBF\xC3\xAF\xC2\xBB\xC2\xBF
\xEF\x00\xBB\x00\xBF\x00
\xFF\xFE\xEF\x00\xBB\x00\xBF\x00
тогда то, что у вас есть, это случайное двойное кодирование. В этом случае вам нужно взглянуть на программу, производящую файл, потому что он не правильно сформирован, парсер SAX будет правильным, чтобы жаловаться, и другие символы Unicode в файле, вероятно, тоже будут испорчены. Возможно, он делает что-то глупое, например, сериализацию документа в байтовую строку, а затем отправку его через фиктивный цикл декодирования / кодирования.
В любом случае, если вам нужно, чтобы синтаксический анализатор пропускал проблемную последовательность байтов, вам пришлось бы передать его версией, которую вы взломали вручную, чтобы удалить этот префикс. Не зная, какой у вас синтаксический анализатор SAX (или даже какой язык), трудно сказать, как это сделать.
Может быть, вы можете искать входной поток перед передачей его парсеру? Может быть, вы можете прочитать файл в байтовую строку и передать его, лишенный начальных байтов, парсеру? Если ваш синтаксический анализатор не предоставляет вам этих опций, вам придется загрузить файл в байтах, обрезать начало и снова сохранить его в новый файл.