Странное исключение из SgmlReader

Я использую SgmlReader для анализа файлов HTML на С#. Я использую пример кода, представленный на их веб-сайте:

      using (reader = File.OpenText(fileName))
        {
            try
            {
                xmlDoc = fromHTML(reader);
            }
            catch(Exception ex)
            {
                return ReturnedCode.ErrorOpeningHTMLFile;
            }
        }
private XmlDocument fromHTML(TextReader reader)
    {
        Sgml.SgmlReader sgmlReader = new Sgml.SgmlReader();
        sgmlReader.DocType = "HTML";
        sgmlReader.WhitespaceHandling = WhitespaceHandling.All;
        sgmlReader.CaseFolding = Sgml.CaseFolding.ToLower;
        sgmlReader.InputStream = reader;
        //  create document
        XmlDocument doc = new XmlDocument();
        doc.PreserveWhitespace = true;
        doc.Load(sgmlReader);
        return doc;
    }

Код работает долгое время без каких-либо проблем. Однако недавно он начал бросать следующее исключение вdoc.Load(sgmlReader)линия:

Допустимое значение UTF32 находится в диапазоне от 0x000000 до 0x10ffff включительно и не должно включать суррогатные значения кодовой точки (0x00d800 ~ 0x00dfff).\r\nИмя параметра: utf32

Мне удалось сузить проблему до приведенного ниже содержимого HTML-файла. Если я попытаюсь проанализировать файл, содержащий приведенный ниже код, будет выдано исключение.

      <html>
<br>&#121669935008
</html>

Если я уберу амперсанд во второй строке, код будет работать нормально.

Любая идея, что здесь происходит и как я могу это исправить? Я не могу просто удалить все амперсанды в файлах.

0 ответов

Другие вопросы по тегам