请求中中文乱码造成的原因?
Tomcat接受请求的时候,默认使用ISO-8859-1编码。该编码只占一个字节,而中文占两个字节,所以不支持中文。
乱码解决方法?
对乱码使用ISO-8859-1解码,转成byte数组,然后对byte数组重新使用UTF-8编码。(不管是POST请求还是GET请求都行),似乎这种方法对get请求不起作用。
byte[] tomcatname=req.getParameter("name").getBytes("ISO-8859-1"); String username=new String(tomcatname,"UTF-8");
其他方法?
POST方式:
req.setCharacterEncoding("UTF-8");
该种方式必须在获取第一个参数之前设置,且只对POST请求有效。
GET方式:
重新设置Tomcat的编码方式,修改Tomcat的配置文件server.xml,修改
<Connector port="80" protocoll="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"/>
(默认URIEncoding="ISO-8859-1")为
<Connector port="80" protocoll="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8"/>
但是该方式只对GET方式有效,不建议用。
所以总结起来,
post请求参数有中文,用
req.setCharacterEncoding("UTF-8");
或者
byte[] tomcatname=req.getParameter("name").getBytes("ISO-8859-1");
String username=new String(tomcatname,"UTF-8");
而get请求要改tomcat配置文件,相对于改Tomcat编码。
所以说请求要传中文尽量用POST方式。