WebResponse.GetResponseStream 반환을 문자열로 변환하는 방법은 무엇입니까?


79

많은 예제를 보았지만 모두 천천히 바이트 배열 또는 한 번에 256 문자로 읽습니다. 왜?

결과 Stream값을 구문 분석 할 수있는 문자열로 변환하는 것은 좋지 않습니까?

답변:


58

StreamReader스트림 주변에 생성 한 다음 ReadToEnd.

WebClient.DownloadString대신 전화 를 고려해야 합니다.


1
감사합니다 SLaks, 지금 DownloadString을 확인하십시오. 실제로 Winforms Browser 컨트롤을 사용하여 browser.DocumentStream을 사용하는 이전 앱과 비교하여 다른 소스 코드 문자열을 얻고 있습니다. DownloadString이 문제를 해결할 것이라고 생각하십니까? 간단하지 않은 경우 새 질문을 만들 수 있습니다.
Joan Venge 2011 년

5
인코딩 문제가 있거나 User-Agent.
SLaks 2011 년

감사합니다 SLaks, 나는 지금 DownloadString을 사용하고 당신이 옳은 것이 좋습니다. 이제 결과가 약간 다르기 때문에 차이를 만들어서는 안되지만 <a href=이전 버전 대신 <A href=. 그것은 여전히 ​​인코딩과 관련이 User-Agent있습니까?
Joan Venge 2011 년

2
이상하게 들립니다. IE에 의해 정규화 될 수 있습니다.
SLaks 2011 년

3
WebClientHttpWebRequest관련없는 브라우저 원시 HTTP를 사용합니다. 다른 브라우저에서 다른 View Source를 표시 하면 User-Agent문제입니다.
SLaks 2011 년

142

당신은 사용할 수 있습니다 StreamReader.ReadToEnd(),

using (Stream stream = response.GetResponseStream())
{
   StreamReader reader = new StreamReader(stream, Encoding.UTF8);
   String responseString = reader.ReadToEnd();
}

1
@FaizanMubasher-LINQ To XML을 제안하고 싶습니다.
adatapost

2
당신이 지적한 위대한 것은 StreamReader두 번째 매개 변수를 취 Encoding.UTF8합니다. MS 문서를 보면서 처음에는 알아 차리지 못함
newprint

5
인코딩은 UTF8의 고정 값을 가정하는 대신 response.CharacterSet의 값을 기반으로해야하지 않습니까?
Heinzi

LINQ To XML 샘플?
PreguntonCojoneroCabrón

GetResponse and GetResponseStream예외
PreguntonCojoneroCabrón

10

@Heinzi가 언급했듯이 응답의 문자 집합을 사용해야합니다.

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();
}

5

Richard Schneider가 옳습니다. 아래 코드를 사용하여 utf8 문자 집합이 아닌 사이트에서 데이터를 가져 오면 잘못된 문자열이 표시됩니다.

using (Stream stream = response.GetResponseStream())
{
   StreamReader reader = new StreamReader(stream, Encoding.UTF8);
   String responseString = reader.ReadToEnd();
}

"나는 투표 할 수 없습니다. 그래서 이것을 썼습니다.


3

당신은을 만들 수 있습니다 StreamReader다음, 스트림 주위에 전화 StreamReader.ReadToEnd().

StreamReader responseReader = new StreamReader(request.GetResponse().GetResponseStream());
var responseData = responseReader.ReadToEnd();
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.