dtree中url参数中中文参数的传递,出现乱码问题的解决。

String name="张三";

int id=3;

//两次进行编码

name=java.net.URLEncoder.encode(name,"UTF-8");

name=java.net.URLEncoder.encode(name,"UTF-8");

url="/test/search.do?name="+name+"&"+id;//

一下是controller内的相应

@RequestMapping("/search.do”)

public String search(@RequestParam("name")String name, @RequestParam("id")int id)

       name=java.net.URLDecoder.decode(name,"UTF-8");//此时name是张三

       ....................

}

       原因分析:在浏览器地址栏里,浏览器认为%是个转义字符,浏览器会把%与%之间的编码,两位两位取出后进行解码,然后再传递给处理页面,然后由处理页面进行再次解码,所以需要使用两次URLEncoder.encode方法。

        第一次是把中文编码成%xy的格式; 第二次是对%xy中的%进行编码,%编码成%。客户端和服务器在传递数据时可以用过滤器filter解决字符编码问题,但filter只能解决post方式提交的数据。对于get方式,可以使用两次java.net.URLEncoder.encode并在服务器中使用java.net.URLDecoder.decode  今天在springmvc遇到这个问题,尽管页面、类和web容器都统一了字符编码,提交的数据依然是乱码,所以就采用了2次URLEncoder。encode编码方式,乱码问题就解决了。

        当然,不管在js中,还是后台,只是调用的编码解码函数不同而已,问题解决原理,却是一样的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值