[英]Converting Html utf-8 charset to ISO-8859-1 via C#
我一直在努力轉換屬性的html值,但沒有任何成功。
這是我想要轉換的HTML(確定字符集不會在這里顯示,但是,我看到它與你看到的完全一樣)。
<a href="https://sistemas.usp.br/jupiterweb/listarGradeCurricular?codcg=12&codcur=12012&codhab=1&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.