2011-08-16 4 views
1

콘텐츠에 등록 된 상표 기호가 포함 된 웹 페이지 (예 : ®)를 읽으려고합니다. 그러나 아래 예제에서 퀵타임을 사용하여 sb를 보면 ® 대신 물음표가있는 다이아몬드가 보입니다. sb를 serialize하고 javascript를 통해 다른 웹 페이지에 표시하면 같은 문제가 발생합니다. 이 숯불이 내 빠른보기 창에 표시되는 방식입니까, 아니면 페이지를 잘못 읽거나 읽는 중입니까? 코드는 다음과 같습니다 :웹 페이지 읽기 - 비표준 문자에 다이아몬드/물음표 표시 방지

const int bufSize = 4096; 
    const int maxBytesToGet = 5000000; 
    byte[] buf = new byte[bufSize]; 
    StringBuilder sb = new StringBuilder(bufSize); 

    using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) 
    { 

     using (Stream responseStream = response.GetResponseStream()) 
     { 
      while ((bytesToGet = responseStream.Read(buf, 0, buf.Length)) != 0) 
      { 
       sb.Append(Encoding.UTF8.GetString(buf, 0, bytesToGet)); 
       if (sb.Length > maxBytesToGet) break; 
      } 
     } 
    } 
+0

trademark fraud bot? 나는 그 스팸을 계속 받고있다. 누구든지 이것을 막을 방법을 알고 있습니까? 이미지 사용을 제외하고? – David

+0

귀하의 의견을 이해하지 못합니다 – Mike

+2

@ David, 나는 귀하의 의견을 얻지도 못하고 절대적으로 downvote에 대한 이유를 보지 못했습니다. 이것은 인코딩에 대한 매우 간단한 질문입니다. –

답변

4

응답은 UTF8이라고 가정합니다. 인코딩이 실제로 무엇인지 확인하려면 응답 헤더를 확인해야합니다. Encoding.GetString 대신 StreamReader을 사용하는 것이 더 쉽습니다.

string responseText; 

using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) 
{ 
    using (Stream responseStream = response.GetResponseStream()) 
    { 
     using(StreamReader reader = new StreamReader(responseStream, Encoding.GetEncoding(response.ContentEncoding))) 
     { 
      responseText = reader.ReadToEnd(); 
     } 
    } 
} 
+0

고마워 .........! – Mike

+0

또한 response.ContentEncoding 대신 response.CharacterSet을 사용하여 종료되었습니다. – Mike

관련 문제