通過C#將Html utf-8字符集轉換為ISO-8859-1

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>

好吧,這個htmlnode的值是“Administração - São Paulo - diurno”。

我正在使用HtmlAgilityPack為此解析HtmlPage,一旦我到達此節點,其innerText值就像這樣: Administração â São Paulo â diurno

我假設頁面的原始字符集是UTF-8,因為這就是html上的編碼標籤對我說的。

我如何將這個奇怪的字符串轉換為: Administração - São Paulo - Diurno

我已經嘗試過這些線程:第一個 線程和第二個線程 ,沒有解決我的問題

編輯:我通過C#WebRequest Get獲取頁面。

EDIT2:添加了HtmlAgilityPack標記

問題是孤立的:WebRequest有時會弄亂Html。

有沒有其他方法來設置編碼?我正在嘗試:_webReq.Encoding =“ISO-8859-1”

提前致謝

一般承認的答案

經過一個小測試後,您可以看到該字符串未正確地將Encoded恢復為其原始形式。

樣品測試:

 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);

這打印:

 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);

如您所見,原始字符串使用UTF8轉換為字節,但隨後使用默認編碼將其轉換回字符串。

這是錯的。

如果WebRequest.GetResponse()將字符串作為錯誤值返回,則該方法存在問題。嘗試將HttpWebRequest上的TransferEncoding屬性設置為UTF8。

在設置TransferEncoding屬性之前,必須先將SendChunked屬性設置為true。通過將TransferEncoding設置為null來清除TransferEncoding對SendChunked的值沒有影響。分配給TransferEncoding屬性的值將替換任何現有內容。

或者您可以嘗試在打開的StreamReader上將Encoding設置為UTF8。我能看到你的代碼嗎?


熱門答案

我解決了:

    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);



許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因