针对Post方式提交的请求如果出现乱码,可以每次在request解析数据时设置编码格式:request.setCharacterEncoding("utf-8");
也可以使用编码过滤器来解决,最常用的方法是使用spring提供的编码过滤器:在Web.xml中增加如下配置(要注意的是它的位置一定要是第一个执行的过滤器)
针对Get方式的乱码问题,
post请求和get请求存放参数位置是不同的:
post方式参数存放在请求数据包的消息体中。get方式参数存放在请求数据包的请求行的URI字段中,以?开始以param=value¶me2=value2的形式附加在URI字段之后。而request.setCharacterEncoding(charset); 只对消息体中的数据起作用,对于URI字段中的参数不起作用。
此时可以在每次发生请求之前对URL进行编码:例如:Location.href="/encodeURI"("http://localhost/test/s?name=中文&sex=女");
当然也有更简便的方法,那就是在服务器端配置URL编码格式:
修改tomcat的配置文件server.xml:
<Connector URIEncoding="UTF-8" port="8080" maxHttpHeaderSize="8192"maxThreads="150" minSpareThreads="25" maxSpareThreads="75"connectionTimeout="20000" disableUploadTimeout="true" />
只需增加 URIEncoding="UTF-8" 这一句,然后重启tomcat即可。
对于表单提交数据默认是使用get方式,一般指定method="post" 这时乱码的解决就可以在web.xml中配置即可。
经验:1:如果中文返回出现??字符,这表明没有加response.setCharacterEncoding("UTF-8");这句话。
2:如果返回的中文是“烇湫”这种乱码,说明浏览器的解析问题,应该检查下是否忘加response.setHeader("Content-type", "text/html;charset=UTF-8");这句话。
//这句话的意思,是让浏览器用utf8来解析返回的数据 response.setHeader("Content-type", "text/html;charset=UTF-8"); //这句话的意思,是告诉servlet用UTF-8转码,而不是用默认的ISO8859 response.setCharacterEncoding("UTF-8");
request.setCharacterEncoding("UTF-8")的作用是设置对客户端请求进行重新编码的编码。
response.setCharacterEncoding("UTF-8")的作用是指定对服务器响应进行重新编码的编码。