问题描述
当我使用 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);
}
}