如何解决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;
我应该补充一点,它在没有编码的情况下也有同样的问题。
有人知道问题出在哪里吗?
解决方法
转换一个已经过 HTML 编码的字符串用于 HTTP 传输 成一个解码的字符串。
要在 Web 应用程序之外对值进行编码或解码,请使用
WebUtility
课。
示例
var asd = HttpUtility.HtmlDecode("۱۳۹۹-۱۱-۲۰ ۲۳:۲۷");
Console.WriteLine(asd);
输出
۱۳۹۹-۱۱-۲۰ ۲۳:۲۷
,
这些是表示原始文本的 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);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。