Widzę wiele przykładów, ale wszystkie z nich odczytują je powoli na tablice bajtów lub 256 znaków naraz. Czemu?
Czy nie jest wskazane, aby po prostu przekonwertować wynikową Stream
wartość na ciąg, w którym mogę ją przeanalizować?
Widzę wiele przykładów, ale wszystkie z nich odczytują je powoli na tablice bajtów lub 256 znaków naraz. Czemu?
Czy nie jest wskazane, aby po prostu przekonwertować wynikową Stream
wartość na ciąg, w którym mogę ją przeanalizować?
Odpowiedzi:
Powinieneś utworzyć StreamReader
wokół strumienia, a następnie zadzwoń ReadToEnd
.
Zamiast tego powinieneś rozważyć zadzwonienie WebClient.DownloadString
.
User-Agent
.
<a href=
zamiast tego, co było, dostaję coś takiego, jak stary <A href=
. To wciąż jest związane z kodowaniem, czy User-Agent
myślisz?
WebClient
i HttpWebRequest
używaj surowego HTTP bez przeglądarki. Jeśli różne przeglądarki pokazują różne źródła widoku , jest to User-Agent
problem.
Możesz użyć StreamReader.ReadToEnd()
,
using (Stream stream = response.GetResponseStream())
{
StreamReader reader = new StreamReader(stream, Encoding.UTF8);
String responseString = reader.ReadToEnd();
}
StreamReader
zajmuje drugi parametr Encoding.UTF8
. Nie zauważyłem tego na początku, patrząc na dokumentację MS
GetResponse and GetResponseStream
może rzucać wyjątki
Jak wspomniał @Heinzi, należy użyć zestawu znaków odpowiedzi.
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 ma rację. użyj poniższego kodu, aby pobrać dane ze strony, która nie jest zestawem znaków utf8, otrzyma zły ciąg.
using (Stream stream = response.GetResponseStream())
{
StreamReader reader = new StreamReader(stream, Encoding.UTF8);
String responseString = reader.ReadToEnd();
}
„Nie mogę głosować. Więc to napisałem.