C# HttpRequest 中文编码问题


工作中的项目要用到别家的网络短信平台,工作中遇到中文编码的问题,特总结以备忘。

GET方法:

 

public string DoWebRequest(string url)         {             HttpWebResponse webResponse = null;             HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url);             webRequest.Method = "POST";             string responseStr = null;             webRequest.Timeout = 50000;             webRequest.ContentType = "text/html; charset=gb2312";             try             {                 //尝试获得要请求的URL的返回消息                 webResponse = (HttpWebResponse)webRequest.GetResponse();             }             catch (WebException e)             {                 //发生网络错误时,获取错误响应信息                 responseStr = "发生网络错误!请稍后再试";             }             catch (Exception e)             {                 //发生异常时把错误信息当作错误信息返回                 responseStr = "发生错误:" + e.Message;             }             finally             {                 if (webResponse != null)                 {                     //获得网络响应流                     using (StreamReader responseReader = new StreamReader(webResponse.GetResponseStream(), Encoding.GetEncoding("GB2312")))                     {                         responseStr = responseReader.ReadToEnd();//获得返回流中的内容                     }                     webResponse.Close();//关闭web响应流                 }             }             return responseStr;         }

注意:url中的中文,要先用HttpUtility.UrlEncode("内容",编码) 用服务器接收的编码,编码一下。

POST方法:

 

  private string DoWebRequestByPost(string url, string param)         {             HttpWebResponse webResponse = null;             HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url);             //使用post方式提交             webRequest.Method = "POST";             string responseStr = null;             webRequest.Timeout = 50000;             //要post的字节数组             byte[] postBytes = encoding.GetBytes(param);                          webRequest.ContentType = "application/x-www-form-urlencoded;";             webRequest.ContentLength = postBytes.Length;             using (Stream reqStream = webRequest.GetRequestStream())             {                 reqStream.Write(postBytes, 0, postBytes.Length);             }             try             {                 //尝试获得要请求的URL的返回消息                 webResponse = (HttpWebResponse)webRequest.GetResponse();             }             catch (Exception)             {                 //出错后直接抛出                 throw;             }             finally             {                 if (webResponse != null)                 {                     //获得网络响应流                     using (StreamReader responseReader = new StreamReader(webResponse.GetResponseStream(), encoding))                     {                         responseStr = responseReader.ReadToEnd();//获得返回流中的内容                     }                     webResponse.Close();//关闭web响应流                 }             }             return responseStr;         }
encoding为服务器接收的编码,例如:Encoding.GetEncoding("GBK")等
param post请求的参数 param1=123&param2=中国&param3=abc 这样的格式,中文部分不用使用编码,方法内转成byte[]时
会进行编码。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM