2013-01-13 7 views
0

HtmlAgilityPack을 사용하여 웹 페이지를로드하고 구문 분석하는이 코드가 있습니다. 대부분의 웹 페이지에서 작동하지만 일본어 웹 페이지를로드하려고하면 인코딩이 잘못되었습니다. 어떻게해야합니까? 실제로 웹 페이지 인코딩을 기반으로 인코딩을 설정하려면 어떻게해야합니까?HtmlAgilityPack으로 일본어 웹 페이지로드하기

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; 
    } 
} 

답변

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; 
     } 
    } 
} 
0

infoseek.co.jp는 HTML 태그 닷넷

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

에 미러링 된 HTTP 헤더

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

, EUC-JP를 디코딩 Code Page 51932를 사용하여 응답한다.

+0

예. 알고 있습니다. 하지만 문제는이 태그는 문서가로드 된 후에 액세스 할 수 있지만 문서가로드되는 동안 인코딩이 필요하다는 것입니다. 제발 좀 생각해 봤어? –

+0

이 스레드의 마지막 답변을보십시오. http://htmlagilitypack.codeplex.com/discussions/60174 System.Net.WebClient를 사용하여 페이지를 문자열로 검색 한 다음 문자열을 전달하여 HtmlDocument를 만듭니다. – devio

관련 문제