2011-12-11 60 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 +仇恨+擴展+ ASCII ...這是錯誤的。它應該是這樣的(我使用fiddler和谷歌瀏覽器閱讀它):%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 + +恨擴展+ 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(); 
     }