簡體   English   中英

ASP.NET Core HtmlAgilityPack編碼錯誤

[英]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-8iso-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.

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