Как преобразовать возврат WebResponse.GetResponseStream в строку? - PullRequest
77 голосов
/ 25 сентября 2011

Я вижу много примеров, но все они медленно читают их в байтовые массивы или 256 символов за раз. Почему?

Не рекомендуется ли просто преобразовать полученное значение Stream в строку, где я могу его проанализировать?

Ответы [ 5 ]

132 голосов
/ 25 сентября 2011

Вы можете использовать StreamReader.ReadToEnd(),

using (Stream stream = response.GetResponseStream())
{
   StreamReader reader = new StreamReader(stream, Encoding.UTF8);
   String responseString = reader.ReadToEnd();
}
59 голосов
/ 25 сентября 2011

Вы должны создать StreamReader вокруг потока, а затем вызвать ReadToEnd.

Вам следует вместо этого вызвать WebClient.DownloadString.

8 голосов
/ 09 октября 2015

Как упомянул @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();
}
4 голосов
/ 27 августа 2016

Ричард Шнайдер прав.используйте приведенный ниже код для извлечения данных с сайта, который не является кодировкой utf8, и получит неверную строку.

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

"Я не могу голосовать. Поэтому написал это.

2 голосов
/ 11 августа 2015

Вы можете создать StreamReader вокруг потока, затем вызвать StreamReader.ReadToEnd().

StreamReader responseReader = new StreamReader(request.GetResponse().GetResponseStream());
var responseData = responseReader.ReadToEnd();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...