JSP学习笔记(一百零六):Java开发中的url中文编码
URL中传递中文参数乱码的问题,是一个老问题。
我以Tomcat和Weblogic分别测试,给出一个统一的解决办法:
传递中文参数前,可以使用javascript对参数进行编码,可以使用escape,encodeURI,encodeURIComponent这三个函数中的其中一个进行编码。在我测试的过程中,用escape解码需要借助第三方写的函数,而且函数写的比较复杂,放弃;用encodeURIComponent的话,在Tomcat下与Weblogic下解码方式不一致,放弃;用encodeURI可以。
encodeURI在Java里等同于URLEncoder.encode(str, "utf-8");
encodeURIComponent在Java里等同于URLEncoder.encode(str, "gb2312")
我用的是struts2,在action类中,无需解码,直接可以用
在普通的jsp页面中,需要在页面指定:request.setCharacterEncoding("gb2312");或者<%@ page language="java" pageEncoding="gb2312"%>
还有一点就是,在Tomcat下需要修改Server.xml中编码为utf-8:URIEncoding="UTF-8"
我以Tomcat和Weblogic分别测试,给出一个统一的解决办法:
传递中文参数前,可以使用javascript对参数进行编码,可以使用escape,encodeURI,encodeURIComponent这三个函数中的其中一个进行编码。在我测试的过程中,用escape解码需要借助第三方写的函数,而且函数写的比较复杂,放弃;用encodeURIComponent的话,在Tomcat下与Weblogic下解码方式不一致,放弃;用encodeURI可以。
encodeURI在Java里等同于URLEncoder.encode(str, "utf-8");
encodeURIComponent在Java里等同于URLEncoder.encode(str, "gb2312")
我用的是struts2,在action类中,无需解码,直接可以用
在普通的jsp页面中,需要在页面指定:request.setCharacterEncoding("gb2312");或者<%@ page language="java" pageEncoding="gb2312"%>
还有一点就是,在Tomcat下需要修改Server.xml中编码为utf-8:URIEncoding="UTF-8"
<Connector port="8080" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="UTF-8" />
这样,在Tomcat和Weblogic就可以用统一的方式解决中文乱码了。写的很乱,有时间再把这篇文章整理一下。