【问题标题】:Is it possible to get data from web response in a right encoding是否可以以正确的编码从 Web 响应中获取数据
【发布时间】:2011-10-03 11:01:11
【问题描述】:
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”中得到 � 符号。有没有可能避免这种情况,获取可读格式的数据?

【问题讨论】:

  • 您从哪里获得响应数据?如果它来自您可以控制的服务器,则可以确保双方的编码相同。
  • 我认为您可能需要在 HttpWebRequest 对象上显式设置 UserAgent 属性...这个问题的公认答案应该会有所帮助:stackoverflow.com/questions/6031222/…
  • 没有。我不控制服务器端。我从页面中获取数据,有时会以俄语返回数据。

标签: c# .net encoding


【解决方案1】:
// 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);
    }
}

【讨论】:

  • 但是没有“StreamReader”构造函数,它像“String”类型一样采用“Encoding”。
  • 当我尝试以这种方式找出编码时:Encoding.GetEncoding(response.ContentEncoding)。它抛出异常,说“编码名称不正确”。
  • 你应该确保responce变成response
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-30
  • 2015-01-03
  • 2021-08-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多