自tomcat5.x起,tomcat就对post与get采用不同的解码方法。
对于post提交的中文,我们一般这么做:req.setCharacterEncoding(charset);
对于get:可通过如下设置方式
tomcat的config/server.xml
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
中加入
useBodyEncodingForURI="true"(推荐) 或URIEncoding="utf-8"(不推荐,tomcat所有App的get处理只能用utf-8解码)
对于返回页面,必须做类似的设置:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
目的是告诉浏览器,该通过哪个字符集解码。
---------------------------------------------------------------------------------------------------------
如果有哪家熊孩子特别手欠,非要在地址栏输入中文参数,而你又非要接受的话,可以这样:
username = new String(username.getBytes("iso-8859-1"),"gbk");
过程解释:
编码:
地址栏输入中文,浏览器使用操作系统默认字符集编码(GBK);其余正常的get、post提交,用的都是页面指定的字符集,即<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">指定的utf-8.
解码:
tomcat拿到这个URL后,
若是post,则按req.setCharacterEncoding(charset);字符集解析,
若为get,则按server.xml中参数解析(如上述,没指定参数则为iso-8859-1)