servlet编码问题
在获取中文的请求参数时,可能会出现乱码问题(和请求方式、tomcat服务器版本有关),具体可以分为以下三种情况:
- 如果请求是GET提交,并且tomcat是8.0及以后的版本,GET提交的中文参数,在获取时不会出现乱码问题!(8.0以后的tomcat包括8.0在获取GET提交的中文参数时,已经处理中文乱码问题。)
- 如果请求是POST提交,不管是哪个版本的tomcat服务器,在获取中文参数时,都会出现乱码问题。因为tomcat底层在接收POST提交的参数时,默认会使用iso8859-1编码接收,而这个编码中没有中文字符,所以在接收中文参数时,一定会出现中文乱码问题!
post提交乱码解决方案:
request.setCharacterEncoding("utf-8");
注意:这行代码不会影响GET提交,只对POST提交有效!这行代码要放在任何获取参数的代码之前执行!
get提交乱码解决方案:
如果请求是GET提交,并且tomcat是7.0及以前的版本,GET提交的中文参数,在获取时会出现乱码问题!
在[tomcat安装目录]/ conf/server.xml文件的(修改端口的)Connector
标签上,添加一个 URIEncoding="utf-8"
属性,如下:
<Connector port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
URIEncoding="utf-8" />
同时在[Eclipse]/Servers/[当前tomcat服务器对应的配置目录]/server.xml文件中,在Connector标签上,添加一个 URIEncoding="utf-8" 属性,同上!(idea可省略这一步)
其他乱码解决
-
pageEncoding=”UTF-8”
的作用是设置JSP编译成Servlet时使用的编码。(在jsp文件中使用) -
contentType=”text/html;charset=UTF-8”
的作用是指定服务器响应给浏览器的编码。(jsp中使用) -
request.setCharacterEncoding(“UTF-8”)
的作用是设置对客户端请求和数据库取值时的编码,不指定的话使用iso-8859-1。(只解决POST乱码)// 解决GET乱码可以修改tomcat的server.xml中的 URIEncoding属性 // 或使用 str = new String(str.getBytes("iso-8859-1"),"utf-8");
-
response.setCharacterEncoding(“UTF-8”)
的作用是指定服务器响应给浏览器的编码。 -
response.setContentType(“text/html;charset=utf-8”)
的作用是指定服务器响应给浏览器的编码。同时,浏览器也是根据这个参数来对其接收到的数据进行重新编码(或者称为解码)。