[英]ASP.NET Core HtmlAgilityPack Encoding errors
有一些關於編碼問題和HtmlAgilityPack
帖子,但未解決此問題:
由於該網站,我嘗試解析包含這樣的Unicode符號€
或ä
, ü
我試圖編碼設置為Unicode:
public class WebpageDeserializer
{
public WebpageDeserializer() {}
/*
* Example address: https://www.dslr-forum.de/showthread.php?t=1930368
*/
public static void Deserialize(string address)
{
var web = new HtmlWeb();
web.OverrideEncoding = Encoding.Unicode;
var htmlDoc = web.Load(address);
//further decoding fails because unicode decoded characters are not proper html (looks more like chinese)
}
}
但現在
htmlDoc.DocumentNode.InnerHtml
看起來像這樣:
π佄呃偙⁅瑨汭倠䉕䥌⁃ჲ⼯㍗⽃䐯䑔堠呈䱍ㄠ〮吠慲獮瑩潩慮⽬䔯≎...
如果我嘗試使用UTF-8
或iso-8859-1
則將€
符號轉換為
(以及ä
, ö
, ü
)。 我怎樣才能解決這個問題?
您的網站配置錯誤,實際編碼為cp1252 。
下面的代碼應該工作:
var client = new HttpClient();
var buf = await client.GetByteArrayAsync("https://www.dslr-forum.de/showthread.php?t=1930368");
var html = Encoding.GetEncoding(1252).GetString(buf);
var doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(html);
而不是Encoding.Unicode
使用:
web.OverrideEncoding = Encoding.GetEncoding("iso-8859-1");
(已通過您的網站和德國變音符號進行了測試)
要獲得正確的編碼,請檢查目標網站的標題。 它包含正確的提示:
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.