Преобразование Html utf-8 в ISO-8859-1 через C #

c# encode html html-agility-pack iso-8859-1

Вопрос

Я изо всех сил пытаюсь преобразовать значение html атрибута без каких-либо успехов.

Вот HTML, который я пытаюсь преобразовать (конечно, кодировка здесь не будет показана, но я вижу ее точно так, как вы ее видите).

<a href="https://sistemas.usp.br/jupiterweb/listarGradeCurricular?codcg=12&amp;codcur=12012&amp;codhab=1&amp;tipo=N" target="_blank">Administração – São Paulo – diurno</a>

Хорошо, значение VALUE этого htmlnode - «Администратор» - «São Paulo - diurno».

Я использую HtmlAgilityPack разобрать HTMLPage для этого, и как только я достичь этого узла, его InnerText значение так же , как это: Administração â São Paulo â diurno

Я предполагаю, что исходная кодировка страницы UTF-8, потому что это то, что говорит мне тег кодирования html.

Как я могу преобразовать эту странную строку в: Administração - São Paulo - Diurno ?

Я уже пробовал эти потоки: нить один и нить два, и ничто не решило мою проблему

EDIT: Я получаю страницу через C # WebRequest Get.

EDIT2: добавлен тег HtmlAgilityPack

Проблема была изолирована: WebRequest иногда испортил Html.

Есть ли другой способ установить кодировку? Я пытаюсь: _webReq.Encoding = "ISO-8859-1"

заранее спасибо

Принятый ответ

После небольшого теста вы можете видеть, что строка неправильно возвращает кодировку обратно в ее исходную форму.

Образец теста:

 var item = "Administração - São Paulo - Diurno";
 Console.WriteLine(item);

 var buffer = Encoding.UTF8.GetBytes(item);
 var item2 = Encoding.Default.GetString(buffer);
 Console.WriteLine(item2);

Это печатает:

Administraçao - Sao Paulo - Diurno
AdministraA§A£o - SA£o Paulo - Diurno

Как вы можете видеть, исходная строка преобразуется в байты с использованием UTF8 , но затем она преобразуется обратно в строку с использованием кодировки по умолчанию .

Это не верно.

Если WebRequest.GetResponse () возвращает строку как неправильное значение, тогда возникает проблема с этим методом. Попробуйте настроить свойство TransferEncoding на HttpWebRequest на UTF8.

Прежде чем вы сможете установить свойство TransferEncoding, вы должны сначала установить для свойства SendChunked значение true. Очистка TransferEncoding путем установки его в значение null не влияет на значение SendChunked. Значения, присвоенные свойству TransferEncoding, заменяют любое существующее содержимое.

Или вы можете попытаться настроить кодировку на UTF8 на открываемом StreamReader. Могу ли я увидеть ваш код?


Популярные ответы

я решил:

    HtmlWeb Webget = new HtmlWeb();
    HtmlDocument doc = new HtmlDocument();
    Webget.AutoDetectEncoding = false;
    Webget.OverrideEncoding = Encoding.UTF8;

    doc_tmp.OptionOutputAsXml = true;
    doc_tmp.OptionReadEncoding = true;
    doc_tmp.OptionFixNestedTags = true;
    doc_tmp.OptionDefaultStreamEncoding = Encoding.UTF8;

            doc_tmp.LoadHtml(tmp.InnerHtml);
            doc_tmp.Save(Console.Out);


Related

Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow