1

我在尝试从 google.com 获取 html 时遇到编码问题。请给我一个建议如何解决这个问题。非常感谢。

public string Html
    {
        get
        {
            try
            {
                var request = WebRequest.Create(Url) as HttpWebRequest;
                request.UserAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.83 Safari/537.1,gzip(gfe)";
                if (request != null)
                {
                    var response = request.GetResponse() as HttpWebResponse;
                    if (response != null)
                    {
                        string Charset = response.CharacterSet;
                        Encoding encoding = Encoding.GetEncoding(Charset);
                        var sr = new StreamReader(response.GetResponseStream(), encoding);
                        return sr.ReadToEnd();
                    }
                }
                return string.Format("Could not create object HttpWebRequest for '{0}'", Url);
            }
            catch (Exception e)
            {
                return e.Message;
            }
        }
    }

这里还有一张图片:

在此处输入图像描述

4

1 回答 1

1

您面临的问题是由于某种原因 Google 不会在标头中发送任何编码信息。如果您使用下面的链接检查标题(特别是 Content-Type 标题)并将第一个(来自您的图像)与第二个进行比较,您会发现第一个缺少一些重要信息。

http://web-sniffer.net/?url=http://www.google.com.ua/intl/ils/ads/

http://web-sniffer.net/?url=http://www.google.de/

您需要在这里做的是首先解析返回的 HTML 并查找<meta>指定编码的 -element,然后使用该新信息重新解码您获得的流。根据您之后对 HTML 所做的事情,您可能希望将http://htmlagilitypack.codeplex.com/作为一个用于处理 HTML 的优秀库,或者只是编写一个正则表达式来提取编码(尽管我真的会推荐第一个替代方案)。

于 2012-08-26T10:17:42.150 回答