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ć?
c#
.net
string
httpwebresponse
Joan Venge
źródło
źródło
User-Agent
.<a href=
zamiast tego, co było, dostaję coś takiego, jak stary<A href=
. To wciąż jest związane z kodowaniem, czyUser-Agent
myślisz?WebClient
iHttpWebRequest
używaj surowego HTTP bez przeglądarki. Jeśli różne przeglądarki pokazują różne źródła widoku , jest toUser-Agent
problem.Możesz użyć
StreamReader.ReadToEnd()
,using (Stream stream = response.GetResponseStream()) { StreamReader reader = new StreamReader(stream, Encoding.UTF8); String responseString = reader.ReadToEnd(); }
źródło
StreamReader
zajmuje drugi parametrEncoding.UTF8
. Nie zauważyłem tego na początku, patrząc na dokumentację MSGetResponse and GetResponseStream
może rzucać wyjątkiJak 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(); }
źródło
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.
źródło
Możesz utworzyć
StreamReader
wokół strumienia, a następnie zadzwonićStreamReader.ReadToEnd()
.StreamReader responseReader = new StreamReader(request.GetResponse().GetResponseStream()); var responseData = responseReader.ReadToEnd();
źródło