Tomcat和Weblogic下ajax或get中文乱码
此种方法保证在Tomcat和Weblogic下都不会产生乱码
1、 <Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8"/>
更改tomcat编码,tomcat默认为iso-8859-1
2、JSP
将参数encodeURIComponent(url)
3、action:
companyName= java.net.URLDecoder.decode(request.getParameter("companyName"),"UTF-8");
或者直接获取
companyName=request.getParameter("companyName");
这样部署到weblogic下不会乱码,也不用在filter里面去设置编码
从上面的信息得知,使用tomcat时,request.getParameter默认使用“iso-8859-1“,所以传递参数前及时使用encodeURIComponent编码后,服务端获得的参数还是乱码,
大家只需将自己tomcat服务器 server.xml文件按下面方式配置即可:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8"/>。
同时传参前使用encodeURIComponent将中文参数使用UTF-8进行编码。
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
spring redirect
- 用spring redirect中文会乱码:如下示例
public String redirectTest(){ redirect:/payment/alipay?body="中文"; } 浏览器会出现 body=??中文乱码
[编辑]解决方案
- spring mvc 有自定义的org.springframework.ui.Model类用与封装url携带的参数具体方式如下:
public String redirectTest(Model model){ model.addAttribute("body", "中文"); return "redirect:/payment/alipay"; }
或者如下方式
public ModelAndView redirectTest(){ return new ModelAndView("redirect:/payment/alipay").addObject("body","中文"); }
以上两种方法都是将方法参数添加到spring自定义的对像中这样就不会乱码的情况了
建议将url的携带参数add到Model对象中
如果是redirect 跳转到另一个方法准备数据,还会出现乱码,这时候可以直接调用准备数据的方法。
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
- //URL 传递中文的2种方法
- //方法一:
- String encodeUrl = java.net.URLEncoder.encode("costBudgetsForm.orgName=投资银行总部/北京三部","UTF-8");
- String enString = java.net.URLDecoder.decode(encodeUrl,"UTF-8");
- System.out.println(enString);
- //方法二:(适合SSH, web.xml拦截器UTF-8,页面UTF-8)
- encodeUrl = "costBudgetsForm.orgName=投资银行总部/北京三部"; //直接使用URL传递
- String sString = new String(encodeUrl.getBytes("ISO-8859-1"), "UTF-8");
- System.out.println(sString);
- //方法三:
- encodeUrl = java.net.URLEncoder.encode("costBudgetsForm.orgName=投资银行总部/北京三部","UTF-8");
- String tranf = new String(encodeUrl.getBytes("ISO-8859-1"),"UTF-8");
- enString = java.net.URLDecoder.decode(tranf,"UTF-8");
- System.out.println(enString);
普通乱码:
尝试:1、使用过滤器进行拦截所有请求,设置request,response 编码
2、为了保证get数据采用UTF8编码,在TOMCAT web.xml 中进行了如下设置, URIEncoding ,
<Connector port="8080" ...... URIEncoding="UTF-8"/>
这里指定了get时候的数据编码。但是,当使用IIS作为webserver转发servlet/jsp请求给Tomcat时候,这个设置却失效了。其实原因很简单:IIS是通过AJP协议,把请求转发到Tomcat监听的8009端口上的,所以这里针对8080的设置自然就无效了。正确的方法是进行下面的设置:
<Connector port="8009" enableLookups="false" redirectPort="8443"
debug="0" protocol="AJP/1.3" URIEncoding="UTF-8"/>
页面URL传递中文 终极解决方案:
页面进行2次encodeURI编码,进行2次URI编码的好处是不管浏览器用户在页面来设置编码,服务器只需一次URLencode转换成UTF-8即可。
params = encodeURI(encodeURI(params));
后台
String paramsTrans = new String(params.getBytes("ISO-8859-1"),"UTF-8");
params = java.net.URLDecoder.decode(paramsTrans , "UTF-8");
当然如果页面参数太多可以使用jquery-form提供的serialize()序列化:
参见:http://ollevere.iteye.com/blog/1554355 (jquery serialize传中文乱码解决方法)