如何将WebResponse.GetResponseStream转换为字符串?

Joa*_*nge 78 .net c# string httpwebresponse

我看到很多例子,但是他们都慢慢地将它们一次读入字节数组或256个字符.为什么?

将结果Stream值转换为可以解析它的字符串是不可取的?

ada*_*ost 134

你可以用StreamReader.ReadToEnd(),

using (Stream stream = response.GetResponseStream())
{
   StreamReader reader = new StreamReader(stream, Encoding.UTF8);
   String responseString = reader.ReadToEnd();
}
Run Code Online (Sandbox Code Playgroud)

  • 编码是否应该基于response.CharacterSet的值而不是假定UTF8的固定值? (5认同)
  • 很好,你指出`StreamReader`采用第二个参数`Encoding.UTF8`.最初在查看MS文档时没有注意到 (2认同)

SLa*_*aks 58

您应该StreamReader在流周围创建一个,然后调用ReadToEnd.

你应该考虑打个电话WebClient.DownloadString.

  • 您要么有编码问题,要么需要设置`User-Agent`. (5认同)
  • `WebClient`和`HttpWebRequest`使用原始HTTP而不涉及浏览器.如果不同的浏览器显示不同的**View Source**,那就是"User-Agent"问题. (3认同)
  • 这听起来很奇怪; 它可能会被IE标准化. (2认同)

Ric*_*der 9

正如@Heinzi所提到的,应该使用响应的字符集.

var encoding = response.CharacterSet == ""
    ? Encoding.UTF8
    : Encoding.GetEncoding(response.CharacterSet);

using (var stream = response.GetResponseStream())
{
    var reader = new StreamReader(stream, encoding);
    var responseString = reader.ReadToEnd();
}
Run Code Online (Sandbox Code Playgroud)


小智 5

理查德·施耐德(Richard Schneider)是对的。使用下面的代码从不是utf8字符集的站点获取数据将得到错误的字符串。

using (Stream stream = response.GetResponseStream())
{
   StreamReader reader = new StreamReader(stream, Encoding.UTF8);
   String responseString = reader.ReadToEnd();
}
Run Code Online (Sandbox Code Playgroud)

“我不能投票。所以写了这个。