servlet编码问题

servlet编码问题

在获取中文的请求参数时,可能会出现乱码问题(和请求方式、tomcat服务器版本有关),具体可以分为以下三种情况:

  1. 如果请求是GET提交,并且tomcat是8.0及以后的版本,GET提交的中文参数,在获取时不会出现乱码问题!(8.0以后的tomcat包括8.0在获取GET提交的中文参数时,已经处理中文乱码问题。)
  2. 如果请求是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可省略这一步)

其他乱码解决

  1. pageEncoding=”UTF-8”的作用是设置JSP编译成Servlet时使用的编码。(在jsp文件中使用)

  2. contentType=”text/html;charset=UTF-8”的作用是指定服务器响应给浏览器的编码。(jsp中使用)

  3. request.setCharacterEncoding(“UTF-8”)的作用是设置对客户端请求和数据库取值时的编码,不指定的话使用iso-8859-1。(只解决POST乱码)

    // 解决GET乱码可以修改tomcat的server.xml中的 URIEncoding属性 
    // 或使用 
    str = new String(str.getBytes("iso-8859-1"),"utf-8"); 
    
  4. response.setCharacterEncoding(“UTF-8”)的作用是指定服务器响应给浏览器的编码。

  5. response.setContentType(“text/html;charset=utf-8”)的作用是指定服务器响应给浏览器的编码。同时,浏览器也是根据这个参数来对其接收到的数据进行重新编码(或者称为解码)。

posted @ 2020-06-12 15:40  zpk-aaron  阅读(163)  评论(0编辑  收藏  举报