2011-10-03 60 views
1
using (WebResponse response = webRequest.GetResponse()) 
{  
    using (var reader = new StreamReader(response.GetResponseStream())) 
    { 
     string tmpStreamData = string.Empty;   
     while (!reader.EndOfStream) 
     { 
      while (reader.Peek() > -1) 
      {     
       tmpStreamData += (char)reader.Read(); 
      }    
     } 
     MessageBox.Show(tmpStreamData); 
    } 
} 

有时我会在“tmpStreamData”中获得 个符号。是否可以避免这种情况并以可读格式获取数据?是否有可能从正确编码的Web响应中获取数据

+0

你从哪里得到响应数据?如果来自服务器,您可以确保双方的编码相同。 –

+0

不,我不控制服务器端。我从页面获取数据,有时会用俄语返回数据。 – Alexander

+0

我想你可能需要在'HttpWebRequest'对象上显式地设置'UserAgent'属性......对这个问题的接受答案应该有所帮助:http://stackoverflow.com/questions/6031222/web-request-encoding-问题 – codefrenzy

回答

4
// Get HTTP response. If this is not an HTTP response, you need to know the encoding yourself. 
using (HttpWebResponse response = (HttpWebResponse)webRequest.GetResponse()) 
{ 
    // If not an HTTP response, then response.CharacterSet must be replaced by a predefined encoding, e.g. UTF-8. 
    using (var reader = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding(response.CharacterSet))) 
    { 
     // Read whole stream to string. 
     string tmpStreamData = reader.ReadToEnd(); 
     MessageBox.Show(tmpStreamData); 
    } 
} 
+2

但是没有“StreamReader”构造函数,它需要像“String”类型那样的“编码”。 – Alexander

+0

当我尝试以这种方式找出编码:Encoding.GetEncoding(response.ContentEncoding)。它抛出异常,说“不正确的编码名称”。 – Alexander

+0

哦,我犯了错误。查看答案的新编辑 – zabulus

相关问题