0

を使用してWebページをロードおよび解析するためのこのコードがありますHtmlAgilityPack。ほとんどの Web ページで機能しますが、日本語の Web ページを読み込もうとすると、エンコーディングが間違っているようです。これどうやってするの?実際、Web ページのエンコーディングに基づいてエンコーディングを設定するにはどうすればよいですか?

class Program {

    private const string HttpMethod = "GET";

    private const string UserAgent =
        "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Chrome/7.0.517.41 Safari/534.7";

    static void Main(string[] args) {
        var request = WebRequest.Create("http://infoseek.co.jp/") as HttpWebRequest;
        if (request == null)
            return;
        request.Method = HttpMethod;
        request.UserAgent = UserAgent;
        var response = request.GetResponse() as HttpWebResponse;
        if (response == null)
            return;
        var stream = response.GetResponseStream();
        var document = new HtmlDocument {
            OptionCheckSyntax = true,
            OptionFixNestedTags = true,
            OptionAutoCloseOnEnd = true,
            OptionDefaultStreamEncoding = Encoding.UTF8,
            OptionReadEncoding = true
        };
        document.Load(stream, Encoding.UTF8);
        var d = document.DocumentNode;
    }
}
4

2 に答える 2

0

infoseek.co.jp は HTTP ヘッダーで応答します

Content-Type    text/html; charset=EUC-JP

HTMLタグに反映されています

<meta http-equiv="Content-Type" content="text/html; charset=EUC-JP">

.Net では、コード ページ 51932を使用して EUC-JP をデコードします。

于 2013-01-13T18:17:35.107 に答える
0

以下のコードで HttpWebResponse オブジェクトからエンコーディングを取得しようとしました。何か問題がありますか、それとも他に考えがありますか?

class Program {

    private const string HttpMethod = "GET";

    private const string UserAgent =
        "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Chrome/7.0.517.41 Safari/534.7";

    static void Main(string[] args) {
        var request = WebRequest.Create("http://infoseek.co.jp/") as HttpWebRequest;
        if (request == null)
            return;
        request.Method = HttpMethod;
        request.UserAgent = UserAgent;
        var response = request.GetResponse() as HttpWebResponse;
        if (response == null)
            return;
        var encoding = TryGetEncoding(response);
        var stream = response.GetResponseStream();
        var document = new HtmlDocument {
            OptionCheckSyntax = true,
            OptionFixNestedTags = true,
            OptionAutoCloseOnEnd = true,
            OptionReadEncoding = true,
            OptionDefaultStreamEncoding = encoding
        };
        document.Load(stream, encoding);
        var d = document.DocumentNode;
    }

    private static Encoding TryGetEncoding(HttpWebResponse response) {
        var charset = response.CharacterSet;
        if (string.IsNullOrWhiteSpace(charset))
            charset = response.ContentEncoding;
        if (string.IsNullOrWhiteSpace(charset))
            return Encoding.UTF8;
        try {
            return Encoding.GetEncoding(charset);
        } catch {
            return Encoding.UTF8;
        }
    }
}
于 2013-01-13T19:01:28.927 に答える