今天前端在群里和我说,节目评论中有空格 然后接口编码后返回的评论 空格变+++号,然后就认为编码有问题,各自进行实验和替换,好在最终解决了。
评论内容:
666 23333
有木有wifi 有木有wifi
有而且耐用5毛的 QAQ
解析返回的JSON
{"DisUserId": "1090",
"DisId": "1141",
"HeadPic": "UpLoadImg/HeadImage/9d78b3ff-c1c5-485b-8d69-dc35bfdd98e8.jpg",
"Nickname": "晨曦",
"DicussInfo": "666 ++++++23333",
"DiscussTime": "2016/10/19 13:50:39"
},
{
"DisUserId": "1090",
"DisId": "1142",
"HeadPic": "UpLoadImg/HeadImage/9d78b3ff-c1c5-485b-8d69-dc35bfdd98e8.jpg",
"Nickname": "晨曦",
"DicussInfo": "%e6%9c%89%e6%9c%a8%e6%9c%89wifi +%e6%9c%89%e6%9c%a8%e6%9c%89wifi",
"DiscussTime": "2016/10/19 13:52:44"
}, 前端进行解码依然有+++号
Server.UrlEncode 编码后内容里空格变加号的解释:
接口中
Context.Response.Charset = "utf-8";
Context.Response.AddHeader("content-type", "text/ plain ; charset=utf-8");
这时候问题就来了, 因为 UrlEncode 在 Encode 的时候, 将空格转换成加号('+'), 在 Decode 的时候将加号转为空格, 但是浏览器是不能理解加号为空格的, 空格就变成了加号.
Context.Response.Charset = "utf-8";
Context.Response.AddHeader("content-type", "text/ plain ; charset=utf-8");
这时候问题就来了, 因为 UrlEncode 在 Encode 的时候, 将空格转换成加号('+'), 在 Decode 的时候将加号转为空格, 但是浏览器是不能理解加号为空格的, 空格就变成了加号.
参考资料
http://blog.csdn.net/xingxing513234072/article/details/7865083
http://www.cnblogs.com/artwl/archive/2012/03/07/2382848.html
解决方法:
1:
Server.UrlEncode =》Uri.EscapeDataString 参考资料 http://www.cnblogs.com/dudu/archive/2011/02/25/asp_net_UrlEncode.html
2:
编码后返回的JSon信息
注意这里已经由+++号变成%20(空格)了//空格是被解释%20
{
"DisUserId": "1090",
"DisId": "1142",
"HeadPic": "UpLoadImg/HeadImage/9d78b3ff-c1c5-485b-8d69-dc35bfdd98e8.jpg",
"Nickname": "晨曦",
"DicussInfo": "%E6%9C%89%E8%80%8C%E4%B8%94%E8%80%90%E7%94%A85%E6%AF%9B%E7%9A%84 %20%20%20QAQ",
"DiscussTime": "2016/10/19 13:52:44"
},
解码后 弹出的信息是:
2:
Regex.Replace( HttpUtility.UrlEncode("c# urlencode 空格变加号 解决办法"),@"\+","%20");
编码后返回的JSon信息
注意这里已经由+++号变成%20(空格)了//空格是被解释%20
{
"DisUserId": "1090",
"DisId": "1142",
"HeadPic": "UpLoadImg/HeadImage/9d78b3ff-c1c5-485b-8d69-dc35bfdd98e8.jpg",
"Nickname": "晨曦",
"DicussInfo": "%E6%9C%89%E8%80%8C%E4%B8%94%E8%80%90%E7%94%A85%E6%AF%9B%E7%9A%84 %20%20%20QAQ",
"DiscussTime": "2016/10/19 13:52:44"
},
解码后 弹出的信息是:
但是经过测试
ad+++asd 这种数据用EscapeDataString 后 +号变成ad%2B%2B%2Basd 前端还的需要通过decodeURIComponent解析,因此不适应
换成EscapeUriString 这种既有空格又有+号的6546 ++++ 56465 得到的数据是 6546%20%20%20++++%2056465
如果不想用这两个方法还有另外一个方法:
public string FormarUrlDecode(string info)
{
if (string.IsNullOrEmpty(info)) return "";
if (info.IndexOf("+") >= 0)
{
return info;
}
else
{
return HttpUtility.UrlDecode(info);
}
}
直接返回 6546 ++++ 56465这种数据