C#里POST数据需要一个byte[]
按照网上搜到的方法用
ASCIIEncoding AE = new ASCIIEncoding();
byte[] bytePost = AE.GetBytes(strData);
这样进行编码,结果中文全部是 乱码,已经弄得快晕了.......试了UTF8Encoding一大堆,又试了UrlEncoder方法,结果都不行问:
1  网页POST的数据最综是按照什么编码的? 做ajax时候说是可以统一用UTF-8解决问题? 但是那种%20类型编码应该是ANSI编码,那到底是怎么编码的呢?2  POST中文数据C#代码到底怎么写?

解决方案 »

  1.   

    中文POST之前先进行UTF-8编码转化
      

  2.   

    %20 属于  UrlEncode 方面AJAX Post 的内容要这么做:  s+="&content="+escape(txtField1.value);  
      

  3.   

    /// <summary>
    /// RequestUrl: request some url, return the response.
    /// </summary>
    /// <param name="strUrl">the url</param>
    /// <param name="strPostDatas">the post data</param>
    /// <param name="objCookieContainer">cookie's(session's) container</param>
    /// <returns></returns>
    public static string RequestUrl(string strUrl, string strPostDatas, ref CookieContainer objCookieContainer)  

    HttpWebResponse res = null; 
    string strResponse = ""; try

    HttpWebRequest req = (HttpWebRequest)WebRequest.Create(strUrl); 
    req.Method = "POST"; 
    req.KeepAlive = true; 
    req.ContentType = "application/x-www-form-urlencoded"; if(objCookieContainer == null)
    objCookieContainer = new CookieContainer();
    req.CookieContainer = objCookieContainer;

    StringBuilder objEncodedPostDatas = new StringBuilder(); 
    byte[] postDatas = null; req.ContentLength = 0;
    if (strPostDatas != null && strPostDatas.Length > 0)
    {
    string[] datas = strPostDatas.TrimStart('?').Split(new char[] {'&'});
    for(int i=0; i<datas.Length; i++)
    {
    string[] keyValue = datas[i].Split(new char[] {'='});
    if(keyValue.Length >= 2) 
    {
    objEncodedPostDatas.Append(HttpUtility.UrlEncode(keyValue[0]));
    objEncodedPostDatas.Append("=");
    objEncodedPostDatas.Append(HttpUtility.UrlEncode(keyValue[1]));
    if(i < datas.Length - 1) 
    {
    objEncodedPostDatas.Append("&");
    }
    }
    }
    postDatas = Encoding.UTF8.GetBytes(objEncodedPostDatas.ToString()); 
    req.ContentLength = postDatas.Length;
    using(Stream reqStream = req.GetRequestStream())
    {
    reqStream.Write(postDatas, 0, postDatas.Length); 
    }
    } res = (HttpWebResponse)req.GetResponse(); 
    objCookieContainer = req.CookieContainer;
    using(Stream resStream = res.GetResponseStream())
    {
    using(StreamReader sr = new StreamReader(resStream, Encoding.UTF8))
    {
    strResponse = sr.ReadToEnd();
    }
    }
    }  
    catch(Exception ex)

    strResponse = ex.ToString(); 
    }  
    finally

    if (res != null)  

    res.Close();

    }
    return strResponse;
    }
      

  4.   

    调用:CookieContainer cc = new CookieContainer();
    string response = RequestUrl("www.123.com", "txt1=中文测试&txt2=中文测试", ref cc);
      

  5.   

    终于搞定了 LS的代码似乎也不能工作
    HttpUtility.UrlEncode默认使用UTF-8编码的,但是传到网页上是ANSI编码调用HttpUtility.UrlEncode时候需要指定 Encoding.Default类似strtxt = HttpUtility.UrlEncode(strtxt, Encoding.Default);