2011-08-16 11 views
1

登録されている商標シンボルを含むウェブページ、つまり®を読むことを試みています。しかし、以下の例でquickwatchを使ってsbを見ると、®の代わりに疑問符がついたダイヤモンドが見えます。私はsbをシリアル化し、javascript経由で別のWebページに表示する場合、同じ問題が発生します。これはちょうど私のクイックウォッチウィンドウにこの文字が表示される、または私は読み取り/ページを誤ってデコードですか?コードは次のとおりです。ウェブページを読む - 非標準文字のダイヤモンド/疑問符を避ける

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

を理解していない@デイビッド、私はあなたのコメントを取得しないと、間違いなく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

関連する問題