2012-06-12 16 views
1

웹 사이트에서 응답을 받기위한 간단한 코드가 있지만 작은 문제가 있습니다. 나는 러시아어 웹 사이트에서 응답을 얻으려고 노력하고 있는데 한 웹 사이트에서 나는 알 수없는 기호를 사용하고 다른 문자는 일반 텍스트를 얻는다. 어디에 문제가있을 수 있습니까?HttpWebRequest의 응답에 UTF-8 기호가 표시되지 않습니다.

에서

응답 : www.kinopoisk.ru

...

응답에서 : www.yandex.ru

Греция - Чехия. 1 : 2 ...

HttpWebRequest http = (HttpWebRequest) HttpWebRequest.Create("http://"); 
    http.Timeout = 30000; 
    http.KeepAlive = true; 
    http.ContentType = "application/x-www-form-urlencoded"; 
    http.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0"; 
    http.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"; 
    http.Proxy = null; 

    WebResponse response = http.GetResponse(); 
    Stream istream = response.GetResponseStream(); 
    StreamReader reader = new StreamReader(istream); 

    Response.Write(reader.ReadToEnd()); 

    reader.Close(); 

답변

7

kinopoisk.ruWINDOWS-1251로 인코딩됩니다 (당신은 Content-Type 헤더에서 볼 수 있습니다.)

디코딩하려면 Encoding.GetEncoding(1251)을 StreamReader에 전달해야합니다.

1

이것은 charset 문제입니다. HttpWebResponse 클래스는 요청에 대한 응답의 문자 집합을 가져 오려면 CharacterSet이라는 속성을 제공합니다. 이 속성은 문자열 유형 값을 반환합니다. 당신이 응답을 인코딩하는 데 사용되는 인코딩 방법 것을 얻고 싶다면

myWebRequest = (HttpWebRequest)HttpWebRequest.Create(url); 
myWebRequest.Method = "GET"; 
myWebResponse = (HttpWebResponse)myWebRequest.GetResponse(); 
string str = myWebResponse.CharacterSet; 

는이 목적을 위해 우리는 ContentEncoding라는 이름의 클래스의 HttpWebRequest의 속성이 있습니다. 이 속성은 문자열 값을 반환합니다.

myWebRequest = (HttpWebRequest)HttpWebRequest.Create(url); 
myWebRequest.Method = "GET"; 
myWebResponse = (HttpWebResponse)myWebRequest.GetResponse(); 
string str = myWebResponse.ContentEncoding; 
관련 문제