【C#】POST请求参数含中文,服务器解析得到乱码
问题:POST请求参数含有中文,已将含中文的string以UTF-8编码格式转为byte[],并写入到请求流中,但服务器收到数据后以UTF-8解码,得到的依然是乱码!
百度到了以下方法,但依然无法解决问题:
byte[] data = Encoding.UTF8.GetBytes(buffer.ToString());
因为问题根本不在这里,而是在必须写上ContentType,并指明字符集 。
同时总结POST请求的写法。
联网工具类:
/// <summary>
/// 带参的POST请求,传递文本数据
/// </summary>
/// <param name="url">例如 192.168.1.222:8080/getMaterialsBySpacePlanIdToClient</param>
/// <param name="parameters"></param>
/// <returns></returns>
public string HttpPostRequest(string url, IDictionary<string, string> parameters)
{
HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(GlobalVariable.SERVER_ADDRESS_TEMP + url);
httpWebRequest.Method = "POST";
httpWebRequest.ContentType = "application/x-www-form-urlencoded;charset=utf8"; // 必须指明字符集!
httpWebRequest.Timeout = 20000;
// 参数
if (!(parameters == null || parameters.Count == 0))
{
StringBuilder buffer = new StringBuilder();
int i = 0;
foreach (string key in parameters.Keys)
{
if (i > 0)
{
buffer.AppendFormat("&{0}={1}", key, parameters[key]);
}
else
{
buffer.AppendFormat("{0}={1}", key, parameters[key]);
}
i++;
}
// 给文本数据编码
byte[] data = Encoding.UTF8.GetBytes(buffer.ToString()); // 必须与ContentType中指定的字符集一致!
// 往请求的流里写数据
using (Stream stream = httpWebRequest.GetRequestStream())
{
stream.Write(data, 0, data.Length);
}
}
// 从响应对象中获取数据
HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
StreamReader streamReader = new StreamReader(httpWebResponse.GetResponseStream(), Encoding.GetEncoding("UTF-8"));
string responseContent = streamReader.ReadToEnd();
streamReader.Close();
httpWebResponse.Close();
httpWebRequest.Abort();
return responseContent;
}
/// <summary>
/// 无参的POST请求
/// </summary>
/// <param name="url"></param>
/// <returns></returns>
public string HttpPostRequest(string url)
{
HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(GlobalVariable.SERVER_ADDRESS_TEMP + url);
httpWebRequest.ContentType = "application/x-www-form-urlencoded"; // 因为POST无参,不写字符集也没问题
httpWebRequest.Method = "POST";
httpWebRequest.Timeout = 20000;
HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
StreamReader streamReader = new StreamReader(httpWebResponse.GetResponseStream());
string responseContent = streamReader.ReadToEnd();
streamReader.Close();
httpWebResponse.Close();
httpWebRequest.Abort();
return responseContent;
}
调用以上方法
// 获取数据
private void GetCityAndCommunityJsonData()
{
Dictionary<string, string> dic = new Dictionary<string, string>();
dic.Add("provinceName", "广西壮族自治区");
string request = GlobalVariable.GET_CITYS_BY_PROVINCE_TO_CLIENT;
string json = NetworkUtils.Instance.HttpPostRequest(request, dic);
System.Console.WriteLine("完成:获取城市/小区数据");
// 将Json反序列化为对应的对象集合
list = JsonConvert.DeserializeObject<List<CityAndCommunity>>(json);
for (int i = 0; i < list.Count; i++)
{
System.Console.WriteLine(list[i].ToString());
}
}
// 实体类
class CityAndCommunity
{
public string City { get; set; }
public string[] Community { get; set; }
public override string ToString()
{
if (Community != null)
{
string communityStr = "";
for (int i = 0; i < Community.Length; i++)
{
if (i != Community.Length - 1)
{
communityStr += Community[i] + " , ";
}
else
{
communityStr += Community[i].ToString();
}
}
return "===========================================\nCity = "
+ City + " , communityStr = " + communityStr;
}
return base.ToString();
}
}
坑点:
- 必须加上httpWebRequest.ContentType = “application/x-www-form-urlencoded;charset=utf8”; 其中字符集也可以是gb2312,只要跟给文本数据编码采用同样格式即可。
极其重要的参考:
http://46aae4d1e2371e4aa769798941cef698.devproxy.yunshipei.com/u011185231/article/details/52090334
【C#】POST请求参数含中文,服务器解析得到乱码的更多相关文章
- window.location.href url含中文服务器收到乱码问题解决
中文乱码问题 window.location.href url含中文服务器收到乱码问题解决 (1).页面中先对中文进行编码. 如:window.location.href = url+"&a ...
- GET请求参数为中文时乱码分析
问题描述 近期做任务时,跟后端联调时遇到一个问题,前端发送get请求,当参数值有中文时,请求失败,请求参数变为乱码.(ps:一般当参数有中文时,很少使用get请求,而是使用post请求来传输数据,请求 ...
- ajax请求参数为中文乱码的情况
解决中文乱码问题的方法有很多. 一.前提是ajax请求传递参数对象到后台,对象中的某个参数的值为中文,到后台之后出现乱码,导致报错.问题解决如下: rest层: 二.在tomcat的server.xm ...
- 解决请求参数的中文乱码问题(get、post)
2018-11-28 在web请求与响应中,会遇到乱码问题,比如填写表单数据时,难免会输入中文,姓名.公司名称等.由于HTML设置了浏览器在传递请求参数时,采用的编码方式是UTF-8,但在解码时采用的 ...
- get请求参数为中文,参数到后台出现乱码(注:乱码情况千奇百怪,这里贴我遇到的情况)
前言 get请求的接口从页面到controller类出现了乱码. 解决 参数乱码: String param = "..."; 使用new String(param.getByte ...
- vue post请求 参数带有中文后端无法接收或者收到乱码,无法返回数据问题
问题来源: 在使用axios时,和java联调,发现调接口服务器始终拿不到参数data,但是检查network也的确传了data,才有了该文章. 基于 vue-axios 和 $.ajax 两种请求方 ...
- XML编码utf-8有中文无法解析或乱码 C#
XML的encoding="UTF-8" ,含有中文的话(部分)会出现乱码. 网上还是很多这类问题跟解决办法的. 表现为用ie或者infopath之类的xml软件打不开这个xml, ...
- URL参数带中文,后台接收乱码解决方案
1.前台中文参数用encodeURIComponent()进行编码,如: var textName= encodeURIComponent(name); 2.对整个URL用encodeURI()进行编 ...
- window.location.herf=url参数有中文,到后台乱码问题解决
js中的代码: /*将中文的参数进行两次编码 */ function queryByName(){ //获取查询条件的用户名 ...
随机推荐
- AsyncTask和AsyncQueryHandler之比较
定义AsyncTask子类 private class LoadContactsTask extends AsyncTask<Void, Void, List<TxrjContact> ...
- 修改注册表值解决ie被恶意窜改的问题
修改注册表值解决ie被恶意窜改的问题 IE消失 运行—Regedit 主键HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\HideDes ...
- Android开发之模仿UC浏览器的菜单
这个内容内容涉及到的了两个知识点: PopupWindow:使用PopupWindow创建一个简单的菜单 使用TabHost创建标签:这个网上好多教程随便看看就好. 实现思路: 观察一下UC浏览器的菜 ...
- Python学习笔记020——数据库中的数据类型
1 数值类型 数值类型分为有符号signed和无符号unsigned两种. 1.1 整型 int (1)bigint 极大整型(8个字节) 范围 :-2**64 ~ 2**64 - 1 -922337 ...
- RMAN兼容性列表
Target/Auxiliary Database RMAN Executable Catalog Database Catalog Schema 8.1.7.4 8.1.7.4 >=8.1.7 ...
- Calendar 中getActualMaximumd 功能
String str = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS")) .format(new Date()); Calend ...
- vnc viewer中开启剪切板复制内容到ubuntu系统中
说明,本机是ubuntu16,安装的vnc server 是x11vnc,具体安装方法请看之前博文.ubuntu16.4中开启vncserver进行远程桌面 vncviewer on Windows ...
- Java web中listener、 filter、servlet 加载顺序
真正的加载顺序为:context-param -> listener -> filter -> servlet 加载顺序与它们在 web.xml 文件中的先后顺序无关.即不会因为 f ...
- Spring 一二事(6) - IOC MVC 简易搭建
<bean id="personAction" class="com.lee.spring008.IOC.DI.MVC.PersonAction"> ...
- linux工具大全
Linux Performance hi-res: observability + static + perf-tools/bcc (svg)slides: observabilityslides: ...