.Net C# 抓取网页链接时无法获取日文汉字(仅 unicode 值)

.Net C# Can't get Japanese Kanji (only the unicode values) when crawling web links

这是一个 WinForms 应用程序:

我还没有找到适合我的解决方案,尽管人们在 SO 上确实有类似的问题。

我有以下代码:

private static ArrayList GetURLS(string url)
        {
            ArrayList alLinks = new ArrayList();

            HtmlDocument doc = new HtmlWeb().Load(url);

            var linkTags = doc.DocumentNode.Descendants("link");
            var linkedPages = doc.DocumentNode.Descendants("a")
                                              .Select(a => a.GetAttributeValue("href", null))
                                              .Where(u => !string.IsNullOrEmpty(u))
                                              .Where(u => !u.StartsWith("#")); // Don't include empty links and those that start with a #

            foreach (string links in linkedPages)
            {
                if (IsValidUri(links))
                {
                    if (!alLinks.Contains(links)) alLinks.Add(links.ToLower());
                }
            }

            return alLinks;
        }

网络爬虫 - 无处不在,一旦到达非英语网站就会出错。而不是(在日语页面中)将 url 获取为 Kanji/Hiragana 等,而是 returns %3e unicode 类型编码。这很好,因为我们也可以抓取它们。

然而,最终用户面临着可怕的外观 urls!

所以,对于这个问题:

  1. 如何使用提供的代码的修改在抓取期间获得正确编码的链接?

class System.Web.HttpUtility 有一个方法 UrlDecode 可以完成这个:

var decoded = System.Web.HttpUtility.UrlDecode(links.ToLower());
alLinks.Add(decoded);

示例:

var url = "http://en.wikipedia.org/wiki/%E6%BC%A2%E5%AD%97";
Console.WriteLine(System.Web.HttpUtility.UrlDecode(url));
// http://en.wikipedia.org/wiki/漢字