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ą Streamwartość 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ą Streamwartość na ciąg, w którym mogę ją przeanalizować?
Odpowiedzi:
Powinieneś utworzyć StreamReaderwokół 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-Agentmyślisz?
WebClienti HttpWebRequestużywaj surowego HTTP bez przeglądarki. Jeśli różne przeglądarki pokazują różne źródła widoku , jest to User-Agentproblem.
Możesz użyć StreamReader.ReadToEnd(),
using (Stream stream = response.GetResponseStream())
{
StreamReader reader = new StreamReader(stream, Encoding.UTF8);
String responseString = reader.ReadToEnd();
}
StreamReaderzajmuje drugi parametr Encoding.UTF8. Nie zauważyłem tego na początku, patrząc na dokumentację MS
GetResponse and GetResponseStreammoż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.