簡體   English   中英

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

[英]Converting Html utf-8 charset to ISO-8859-1 via C#

我一直在努力轉換屬性的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ãoPaulo - 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”

提前致謝

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

樣品測試:

 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()將字符串作為錯誤值返回,則該方法存在問題。 嘗試將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 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM