2011-12-11 23 views
0

私の問題は、フォームにPOSTを送信すると、それらが間違った文字だということです。HttpWebResponseとエンコーディング(奇妙な文字)

は、私は、拡張ASCII送信:私は、POST後

█████████

を得る:

- 「A-A-「â - "â-â-â-â-â-â-

マイコード:

req = (HttpWebRequest)HttpWebRequest.Create("http://forum.com/); 
    req.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705;)"; 
    req.Method = "POST"; 
    req.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"; 
    req.Headers.Add("Accept-Language: en-us,en;q=0.5"); 
    req.Headers.Add("Accept-Encoding: gzip,deflate"); 
    req.Headers.Add("Accept-Charset: ISO-8859-1;q=0.7,*;q=0.7"); 
    req.KeepAlive = true; 
    req.Headers.Add("Keep-Alive: 300"); 
    req.Referer = "http://www.google.com/"; 

    req.ContentType = "application/x-www-form-urlencoded"; 
    req.CookieContainer = _cookieJar; 
    req.ServicePoint.Expect100Continue = false; 

    byte[] bytedata = 
     Encoding.GetEncoding("iso-8859-1").GetBytes("subject=" + HttpUtility.UrlEncode(subject.Replace("_", " ")) + 
          "&description=" + HttpUtility.UrlEncode(description)); 

    Stream requestStream = req.GetRequestStream(); 
    requestStream.Write(bytedata, 0, bytedata.Length); 
    requestStream.Close(); 

    try 
    { 
     response = (HttpWebResponse)req.GetResponse(); 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show("oh noes..."); 
    } 
       break; 

オンサイトでのエンコーディングはISO-8859-1です。

+1

をあなたは変な文字を取得し、「ポストの後」と言います。サーバーがそのように文字を解釈することを意味しますか?あるいは、クライアントが応答を読むと、奇妙な文字が得られます。 'bytedata'配列を調べて、送信しているバイトがISO-8859-1であることを確認しましたか?あなたが受け取っていると言っているのは、私にとってUTF-8のようなものです。 。 。 –

+0

別の例があります。私はこのような文字列を持っています:█████████&私は拡張ASCIIを嫌い...そして、私はそのテキストをエンコードするためにHttpUtility.UrlEncodeを使います。私はこのようになる:%e2%96%88%e2%96%88%e2%96%88%e2%96%88%e2%96%88%e2%96%88%e2%96%88%e2 %96%88%e2%96%88%%26 + I + hate + extended + ASCII ...それは間違っています。 %26%239608%3B%26%239608%3B%26%239608%3B%26%239608%3B%26%239608%3B%26%239608(これはフィドラーとグーグルクロムを使って読みました) %3B%26%239608%3B%26%239608%3B%26%239608%3B +%26 + I + hate + extended + ASCII – carck3r

答えて

1

私はそれをやった:

private string Encode(string text) 
     { 
      text = HTMLEncodeSpecialChars(text); 
      return HttpUtility.UrlEncode(text); 
     } 

     public string HTMLEncodeSpecialChars(string text) 
     { 
      StringBuilder sb = new System.Text.StringBuilder(); 
      foreach (char c in text) 
      { 
       if (c > 127) // special chars 
        sb.Append(String.Format("&#{0};", (int)c)); 
       else 
        sb.Append(c); 
      } 
      return sb.ToString(); 
     }