概要
在网络请求当中,总有可能会出现一些因为编码的问题而导致请求/发送出去的中文字符变成了乱码的情况,而这些情况大多都是因为对网络的请求/回应没有做好编码而导致的。在这里,我将要讲述一些我自己解决这些乱码的情况的经验
中文乱码现象
出现乱码的现象可以分为两种,一种是发送出去的数据是乱码,其中一种表现应该就是你想要将某些中文字符的字符串保存在数据库当中,结果,一保存就变成了一堆???了。另一种则是请求回来的数据变成乱码,现象也是差不多,同样会导致一堆???
而解决的方案也比较简单,通常来说,要是没有特殊的要求,使用UTF-8
的编码方式足以应对大多数的情况了。要做的只需要保证POST请求发送是将字符串转化为UTF-8
格式的字节流,以及在收到POST请求时将字节流按UTF-8
的格式进行解码即可
代码实现
这是一个简单实现POST网络请求方法
public static string HttpPost(string url,string postDataStr)
{
string strReturn;
//在转换字节时指定编码格式
byte[] byteData = Encoding.UTF8.GetBytes(postDataStr);
//配置Http协议头
HttpWebRequest resquest= (HttpWebRequest)WebRequest.Create(url);
resquest.Method = "POST";
resquest.ContentType = "application/x-www-form-urlencoded";
resquest.ContentLength = byteData.Length;
//发送数据
using (Stream resquestStream = resquest.GetRequestStream())
{
resquestStream.Write(byteData, 0, byteData.Length);
}
//接受并解析信息
using (WebResponse response = req.GetResponse())
{
//解决乱码:utf-8 + streamreader.readToEnd
StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding("utf-8"));
strReturn = reader.ReadToEnd();
reader.Close();
reader.Dispose();
}
return strReturn;
}