C# Server.UrlEncode/HttpUtility.UrlEncode 编码后生成的json 内容里空格变加号 解决办法

今天前端在群里和我说,节目评论中有空格 然后接口编码后返回的评论 空格变+++号,然后就认为编码有问题,各自进行实验和替换,好在最终解决了。

评论内容:

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 的时候将加号转为空格, 但是浏览器是不能理解加号为空格的, 空格就变成了加号.

参考资料

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:
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这种数据

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值