tomcat字符乱码正解(全)

自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)

 

你可能感兴趣的:(tomcat,解决办法,字符乱码)