web-dev-qa-db-ja.com

WebResponse.GetResponseStreamの戻り値を文字列に変換する方法は?

多くの例がありますが、それらはすべて、バイト配列または256文字に一度にゆっくりと読み込みます。どうして?

結果のStream値を解析可能な文字列に変換することはお勧めできませんか?

78
Joan Venge

ストリームの周りにStreamReaderを作成してから、ReadToEndを呼び出す必要があります。

代わりにWebClient.DownloadStringを呼び出すことを検討する必要があります。

58
SLaks

StreamReader.ReadToEnd()を使用できます。

using (Stream stream = response.GetResponseStream())
{
   StreamReader reader = new StreamReader(stream, Encoding.UTF8);
   String responseString = reader.ReadToEnd();
}
132
adatapost

@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();
}
8

リチャード・シュナイダーは正しい。以下のコードを使用して、utf8文字セットではないサイトからデータを取得すると、間違った文字列が取得されます。

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

「私は投票できない。だからこれを書いた。

5
Howard Lou

ストリームの周りにStreamReaderを作成し、StreamReader.ReadToEnd()を呼び出すことができます。

StreamReader responseReader = new StreamReader(request.GetResponse().GetResponseStream());
var responseData = responseReader.ReadToEnd();
2
Mari