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

时间:2015-01-17 18:34:53

标签: c# winforms character-encoding web-crawler html-agility-pack

这是一个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作为汉字/平假名等获取它返回%3e unicode类型编码。这很好,因为我们也可以抓住这些。

然而,最终用户面临着可怕的网址!

所以,问题是:

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

1 个答案:

答案 0 :(得分:1)

班级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/漢字
相关问题