web-dev-qa-db-fra.com

Comment convertir WebResponse.GetResponseStream retour dans une chaîne?

Je vois de nombreux exemples, mais tous les lisent lentement, dans des tableaux d’octets ou 256 caractères. Pourquoi?

N'est-il pas recommandé de convertir simplement la valeur résultante Stream en une chaîne où je peux l'analyser?

78
Joan Venge

Vous devriez créer un StreamReader autour du flux, puis appeler ReadToEnd.

Vous devriez envisager d'appeler WebClient.DownloadString au lieu.

58
SLaks

Vous pouvez utiliser StreamReader.ReadToEnd(),

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

Comme @Heinzi l'a mentionné, le jeu de caractères de la réponse doit être utilisé.

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

Richard Schneider a raison. utilisez le code ci-dessous pour récupérer des données sur le site qui n'est pas utf8 carset aura une mauvaise chaîne.

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

"Je ne peux pas voter.a écrit ceci.

5
Howard Lou

Vous pouvez créer un StreamReader autour du flux, puis appeler StreamReader.ReadToEnd().

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