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 ヘッダー) を検査し、最初のヘッダー (画像からのもの) と 2 番目のヘッダーを比較すると、最初のヘッダーにはいくつかの重要な情報が欠けていることがわかります。

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

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

ここで行う必要があるのは、最初に返された HTML を解析し<meta>、エンコーディングを指定する要素を探してから、取得したストリームをその新しい情報で再デコードすることです。その後の HTML の処理内容によっては、HTML を処理するための優れたライブラリとしてhttp://htmlagilitypack.codeplex.com/を調べたり、エンコーディングを抽出する正規表現を記述したりすることをお勧めします (ただし、私は本当にお勧めします)。代わりに最初の選択肢)。

于 2012-08-26T10:17:42.150 に答える