Web scraping HtmlAgilityPack与.NET核心3.1:UTF-8,text/html';不是受支持的编码名称

Web scraping HtmlAgilityPack与.NET核心3.1:UTF-8,text/html';不是受支持的编码名称,web-scraping,html-agility-pack,asp.net-core-3.1,.net-core-3.1,Web Scraping,Html Agility Pack,Asp.net Core 3.1,.net Core 3.1,我使用的是HtmlAgilityPack v1.11.21,自从升级到.NET Core 3.1后,在尝试通过URL加载网页时,我开始收到以下错误:“UTF-8,text/html”不是受支持的编码名称。有关定义自定义编码的信息,请参阅encoding.RegisterProvider方法的文档。(参数“name”) 我找到了这篇文章,但我不确定应该在哪里或如何实施: System.Text.EncodingProvider=System.Text.codepagensencodingprovi

我使用的是HtmlAgilityPack v1.11.21,自从升级到.NET Core 3.1后,在尝试通过URL加载网页时,我开始收到以下错误:“UTF-8,text/html”不是受支持的编码名称。有关定义自定义编码的信息,请参阅encoding.RegisterProvider方法的文档。(参数“name”)

我找到了这篇文章,但我不确定应该在哪里或如何实施:

System.Text.EncodingProvider=System.Text.codepagensencodingprovider.Instance;
编码。注册表提供程序(提供程序);
我试着在打电话之前把它放好

var-web=new-HtmlWeb();
var doc=web.Load(urlToSearch);
但这并没有解决问题

这在升级到.NETCore3.1之前运行良好,所以我不确定我到底需要在哪里实施修复

任何想法都将不胜感激

谢谢

对于那些询问url的人,我不想分享,但标题如下:


网站名称
那里看起来没有什么特别的东西。希望它是一个.NET核心3.1的东西

作为另一个度量,我尝试实现下面的函数,但是response.Content.ReadAsStringAsync()返回为空

使用var-httpClient=new-httpClient();
{
var response=wait-httpClient.GetAsync(urlToSearch);
if(响应。IsSuccessStatusCode)
{
var html=await response.Content.ReadAsStringAsync();
var doc=新的HtmlDocument();
doc.LoadHtml(html);
var photoUrl=doc.QuerySelector(“div#headshot”).ChildNodes[0]。属性[“src”]。值;
返回新的OkObjectResult(photoUrl);
}
}

看起来这不是.NET Core 3.1的问题,而是您试图加载的URL的问题

  • 默认值中有UTF-8 另一方面,.NET Core仅支持以下编码:

    • [……]
    • UTF-8(代码页65001),由Encoding.UTF8属性返回
    • [……]
  • 我不记得在HTTP头或HTML中有任何类似

    UTF-8,text/html

    这是意料之中的事

    在标题中,它看起来像:

    Content-Type: text/html;charset=utf-8
    
    在HTML中,例如:

    <meta charset="utf-8"/>
    
  • 不确定
    ReadAsStringAsync
    是否返回空字符串:可能是同一个问题-标题错误,或者可能是代码中的错误(据我所知,
    ReadAsStringAsync
    实际上并不返回
    字符串
    )。您可以尝试将HTML作为静态字符串传递
    html = "<!DOCTYPE html>...";
    doc.LoadHtml(html);
    
    html=“…”;
    doc.LoadHtml(html);
    
    隔离最初的问题
  • 至于
    ReadAsStringAsync
    您应该首先检查它是否成功读取其他站点。我在网上看了。。。有很多可能性。不知道什么对你有用
  • 如果问题在于标题。然后你可以试试这个或者这个或者这个或者其他你喜欢的东西

  • 您能否提供导致问题的
    urlToSearch
    ?我用几个随机选择的URL做了一些测试,它们都工作得很好(使用.NET Core 3.1和HtmlAgilityPack 1.11.21)。错误很明显-带大小写的字符串不是有效的编码ASP.NET总是使用UTF8编码。StackOverflow是一个ASP.NET stie,最近迁移到ASP.NET Core,并使用UTF8,您只需检查浏览器中的编码即可验证。您链接到的问题提到了另一个不存在的编码-
    UTF8
    1)代码是否在其他页面上使用了
    ReadAsStringAsync()
    成功(直到
    QuerySelector
    ,它才是不相关的)?2)HTTP头是什么?3) 你能在任何地方找到
    UTF-8,text/html
    字符串吗?
    curl -v yourURL
    
    html = "<!DOCTYPE html>...";
    doc.LoadHtml(html);