Ich sehe viele Beispiele, aber alle lesen sie langsam in Byte-Arrays oder 256 Zeichen gleichzeitig ein. Warum?
Ist es nicht ratsam, den resultierenden StreamWert einfach in eine Zeichenfolge zu konvertieren, in der ich ihn analysieren kann?
Ich sehe viele Beispiele, aber alle lesen sie langsam in Byte-Arrays oder 256 Zeichen gleichzeitig ein. Warum?
Ist es nicht ratsam, den resultierenden StreamWert einfach in eine Zeichenfolge zu konvertieren, in der ich ihn analysieren kann?
Antworten:
Sie sollten ein StreamReaderum den Stream herum erstellen und dann aufrufen ReadToEnd.
Sie sollten WebClient.DownloadStringstattdessen anrufen .
User-Agent.
<a href=anstelle der alten, die es gab <A href=. Das hängt immer noch mit der Codierung zusammen, oder User-Agentdenkst du?
WebClientund HttpWebRequestverwenden Sie rohes HTTP ohne Browser. Wenn verschiedene Browser unterschiedliche Ansichtsquellen anzeigen , liegt ein User-AgentProblem vor.
Sie können verwenden StreamReader.ReadToEnd(),
using (Stream stream = response.GetResponseStream())
{
StreamReader reader = new StreamReader(stream, Encoding.UTF8);
String responseString = reader.ReadToEnd();
}
StreamReadernimmt zweiten Parameter Encoding.UTF8.
GetResponse and GetResponseStreamkann Ausnahmen
Wie @Heinzi erwähnte, sollte der Zeichensatz der Antwort verwendet werden.
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();
}
Richard Schneider hat recht. Verwenden Sie den folgenden Code, um Daten von einer Site abzurufen, die kein utf8-Zeichensatz ist. Dadurch wird eine falsche Zeichenfolge angezeigt.
using (Stream stream = response.GetResponseStream())
{
StreamReader reader = new StreamReader(stream, Encoding.UTF8);
String responseString = reader.ReadToEnd();
}
"Ich kann nicht wählen. Also schrieb ich das.