我正在尝试从 Amazon 下载 html 文档,但由于某种原因,我得到了一个错误的编码字符串,例如“??K??g??g?e”。
这是我试过的代码:
using (var webClient = new System.Net.WebClient())
{
var url = "https://www.amazon.com/dp/B07H256MBK/";
webClient.Encoding = Encoding.UTF8;
var result = webClient.DownloadString(url);
}
Run Code Online (Sandbox Code Playgroud)
使用 HttpClient 时也会发生同样的事情:
var url = "https://www.amazon.com/dp/B07H256MBK/";
var httpclient = new HttpClient();
var html = await httpclient.GetStringAsync(url);
Run Code Online (Sandbox Code Playgroud)
我还尝试以字节读取结果,然后将其转换回 UTF-8,但我仍然得到相同的结果。另请注意,这并不总是发生。例如,昨天我运行这段代码大约 2 个小时,我得到了一个正确编码的 HTML 文档。但是今天我总是得到一个糟糕的编码结果。它每隔一天发生一次,所以它不是一次性的。
================================================== ================
但是,当我使用 HtmlAgilitypack 的包装器时,它每次都按预期工作:
var url = "https://www.amazon.com/dp/B07H256MBK/";
HtmlWeb htmlWeb = new HtmlWeb();
HtmlDocument doc = htmlWeb.Load(url);
Run Code Online (Sandbox Code Playgroud)
即使我明确定义了正确的编码,是什么导致 WebClient 和 HttpClient 得到错误的编码字符串?默认情况下,HtmlAgilityPack 的包装器是如何工作的?
谢谢你的帮助!