Ich sehe viele Beispiele, aber alle lesen sie langsam in Byte-Arrays oder 256 Zeichen gleichzeitig ein. Warum?
Ist es nicht ratsam, den resultierenden Stream
Wert 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 Stream
Wert einfach in eine Zeichenfolge zu konvertieren, in der ich ihn analysieren kann?
Antworten:
Sie sollten ein StreamReader
um den Stream herum erstellen und dann aufrufen ReadToEnd
.
Sie sollten WebClient.DownloadString
stattdessen anrufen .
User-Agent
.
<a href=
anstelle der alten, die es gab <A href=
. Das hängt immer noch mit der Codierung zusammen, oder User-Agent
denkst du?
WebClient
und HttpWebRequest
verwenden Sie rohes HTTP ohne Browser. Wenn verschiedene Browser unterschiedliche Ansichtsquellen anzeigen , liegt ein User-Agent
Problem vor.
Sie können verwenden StreamReader.ReadToEnd()
,
using (Stream stream = response.GetResponseStream())
{
StreamReader reader = new StreamReader(stream, Encoding.UTF8);
String responseString = reader.ReadToEnd();
}
StreamReader
nimmt zweiten Parameter Encoding.UTF8
.
GetResponse and GetResponseStream
kann 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.