HttpWebRequest的响应不显示UTF-8符号

时间:2012-06-12 19:14:06

标签: c# utf-8 httpwebrequest utf8-decode

我有简单的代码来获取网站的响应,但有一个小问题。我试图从俄罗斯网站和一个网站得到回复我不知道的符号和其他我得到正常的文本。哪里可能有问题?

回复: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();

2 个答案:

答案 0 :(得分:7)

kinopoisk.ru编码为WINDOWS-1251(您可以在Content-Type标题中看到此内容)。

您需要将Encoding.GetEncoding(1251)传递给StreamReader才能对其进行解码。

答案 1 :(得分:1)

这是一个字符集问题。如果要获取请求的响应字符集,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;