问题描述:在利用JQuery的$.get()方式url?username=**异步传[color=red]中文[/color]时,IE出现乱码,而FF是好的!
解决方案:在查资料过程中,获得以下信息,通过浏览器传值时,IE(默认是以UTF-8传值[高级里面可以查看])或FF都是以UTF-8方法传值的,而当通过各种中间件传到后台时中间件又会以ISO-8859-1的方式再次转码,这就是为什么我们在后台可以通过
new String(getRequest().getParameter("dish").getBytes("ISO-8859-1"), "UTF-8")来得到中文的原因!
但是这次很诡异的事情是这样做了,但是IE下仍然出现乱码,FF却是好的!
最后得知在前台传输时加上encodeURI()方法可以解决此问题,这个函数可以解决IE下的怪癖!!
具体实现有两种:
一、
客户端$.get("doupdmenudetail.shtml?param="+encodeURI(param),null,function(data)
服务器端new String(getRequest().getParameter("dish").getBytes("ISO-8859-1"), "UTF-8")
二、
客户端$.get("doupdmenudetail.shtmlparam="+encodeURI(encodeURI(param)),null,function(data)
这里之所有加两个是因为这样代码更加灵活,无论你中间件是否以ISO-8859-1进行转码都不会影响程序,服务器端这样解析:
params=URLDecoder.decode(request().getParameter("param"),"UTF-8");
解决方案:在查资料过程中,获得以下信息,通过浏览器传值时,IE(默认是以UTF-8传值[高级里面可以查看])或FF都是以UTF-8方法传值的,而当通过各种中间件传到后台时中间件又会以ISO-8859-1的方式再次转码,这就是为什么我们在后台可以通过
new String(getRequest().getParameter("dish").getBytes("ISO-8859-1"), "UTF-8")来得到中文的原因!
但是这次很诡异的事情是这样做了,但是IE下仍然出现乱码,FF却是好的!
最后得知在前台传输时加上encodeURI()方法可以解决此问题,这个函数可以解决IE下的怪癖!!
具体实现有两种:
一、
客户端$.get("doupdmenudetail.shtml?param="+encodeURI(param),null,function(data)
服务器端new String(getRequest().getParameter("dish").getBytes("ISO-8859-1"), "UTF-8")
二、
客户端$.get("doupdmenudetail.shtmlparam="+encodeURI(encodeURI(param)),null,function(data)
这里之所有加两个是因为这样代码更加灵活,无论你中间件是否以ISO-8859-1进行转码都不会影响程序,服务器端这样解析:
params=URLDecoder.decode(request().getParameter("param"),"UTF-8");