html agility 返回难以理解的文本

问题描述

当我使用 html agility 时,我将编码设置为 UTF-8。它在阅读某些文本时效果很好,但在某些情况下它返回类似于以下文本的文本。

۱۳۹۹-۱۱-۲۰ ۲۳:۲۷

我的代码大致如下:

 HtmlWeb web2 = new HtmlWeb();
 web2.AutoDetectEncoding = false;
 web2.OverrideEncoding = Encoding.UTF-8;
 var doc = await this.web2.LoadFromWebAsync(url);
  date = doc.DocumentNode
                    .SelectNodes("/html/body/div[2]/main/div[2]/div[2]/div[1]/div[1]/div[2]/span[1]")
                    .First().InnerText;

我应该补充一点,它在没有编码的情况下也有同样的问题。

有人知道问题出在哪里吗?

解决方法

使用HtmlDecode

转换一个已经过 HTML 编码的字符串用于 HTTP 传输 成一个解码的字符串。

要在 Web 应用程序之外对值进行编码或解码,请使用 WebUtility 课。

示例

var asd = HttpUtility.HtmlDecode("۱۳۹۹-۱۱-۲۰ ۲۳:۲۷");
Console.WriteLine(asd);

输出

۱۳۹۹-۱۱-۲۰ ۲۳:۲۷

Full Demo Here

,

这些是表示原始文本的 HTML 实体。如果这是在 Web 应用程序中,您可以使用 HttpUtility.HtmlDecode 命名空间中的 System.Net。如果这是在 Web 应用程序之外,您可以使用 WebUtility.HtmlDecode,同样来自 System.Net 命名空间。这会将 HTML 实体改回相应的文本。

通过小提琴运行它导致

۱۳۹۹-۱۱-۲۰ ۲۳:۲۷

https://dotnetfiddle.net/J7YXZM

using System;
using System.Net;

public class Program
{
    public static void Main()
    {
        var encoded = "۱۳۹۹-۱۱-۲۰ ۲۳:۲۷";
        var decoded = WebUtility.HtmlDecode(encoded);
        Console.WriteLine(decoded);
    }
}

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...