2012-07-06 28 views
0

我一直在努力轉換屬性的html值,但沒有取得任何成功。通過C#將Html utf-8字符集轉換爲ISO-8859-1

這裏是我試圖轉換的HTML(確保charset不會顯示在這裏,但是,我完全按照您的看法來看它)。

<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

我已經嘗試過這些線程:thread onethread two 並沒有什麼解決我的問題

編輯:我通過一個C#的WebRequest獲取得到的頁面。

EDIT2:新增HtmlAgilityPack標籤

問題分離:的WebRequest有時搞亂的HTML。

有沒有其他的方法來設置編碼?我試圖:_webReq.Encoding =「ISO-8859-1」

在此先感謝

+0

我相信你應該HtmlAgilityPack標記它,就像那是哪裏出了問題。你是從數據庫中檢索這些數據嗎?如果你把探查器放在上面,數據是否正確顯示? – 2012-07-06 14:01:14

+0

我會編輯以使其更清晰,並用HtmlAgilityPack對其進行標記。 我通過webrequest c獲取頁面# – 2012-07-06 14:02:00

+1

這也很重要。我相信你可以通過WebRequest設置編碼,給我一分鐘 – 2012-07-06 14:04:01

回答

2

小試後,就可以看到該字符串不正確編碼越來越回到它原來的形式。

樣品測試:

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個字節,但隨後被轉換回字符串使用Default編碼。

這是錯誤的。

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

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

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

+0

謝謝,我的請求的編碼設置爲UTF-8解決了它 – 2012-07-06 14:35:03

0

我解決:

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); 
相關問題