Кодировка HtmlAgilityPack UTF-8

Я использую HtmlAgilityPack для синтаксического анализа моего html-документа, но я не могу получить правильный html.

Например:

string s="<!DOCTYPE html>
              <li>Voltage: <0.05% + 10 mV 
              (<0.1% + 25 mV for output 2 of E3646/47/48/49A)</li>
          </html>";

HtmlAgilityPack.HtmlDocument doc;
doc.LoadHtml(s); 

Но я получаю:

"<li>Voltage: <0.05% +="" 10="" mv=""></0.05%><0.1% +="" 25="" mv="" for="" output="" 2="" of=""></0.1%></li>"

вместо:

"<li>Voltage: <0.05% + 10 mV (<0.1% + 25 mV for output 2 of E3646/47/48/49A)</li>"

В чем проблема?

p.s. У меня есть другой html-документ с кодировкой utf-8, и у него нет проблем.


person Chani Poz    schedule 15.03.2012    source источник


Ответы (1)


У вас есть < в тексте li, в результате чего mV и т. д.... интерпретируются как атрибуты элемента 0.05% (он интерпретируется как элемент, поскольку ему предшествует <).

Вы должны избежать их до &lt;.

string s="<!DOCTYPE html>
              <li>Voltage: &lt;0.05% + 10 mV 
              (&lt;0.1% + 25 mV for output 2 of E3646/47/48/49A)</li>
          </html>";
person Oded    schedule 15.03.2012
comment
спасибо, это поясняет, что проблема не связана с кодировкой, и это половинчатый ответ. но: я не могу изменить текст, потому что я беру его с сайта. так у тебя есть другая идея? - person Chani Poz; 15.03.2012
comment
@Chanipoz - Не совсем так. Если вы не получаете действительный HTML-код, вам нужно сообщить поставщику HTML-кода, что он недействителен и что они должны это исправить. - person Oded; 15.03.2012
comment
Это единственный способ? потому что я не могу спросить поставщика. - person Chani Poz; 15.03.2012
comment
@Chanipoz - это недопустимый HTML. Если провайдер утверждает, что это так, то они ошибаются. За исключением ручного изменения значений, я не вижу способа автоматизировать это. - person Oded; 15.03.2012
comment
@Chanipoz - я понимаю твое разочарование. Мне нечего больше предложить — попробуйте установить несколько разных OptionXXX на HtmlDocument перед разбором — один из них может оказаться полезным. - person Oded; 15.03.2012