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 @   zpk-aaron  阅读(164)  评论(0编辑  收藏  举报
编辑推荐:
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
阅读排行:
· Sdcb Chats 技术博客:数据库 ID 选型的曲折之路 - 从 Guid 到自增 ID,再到
· 语音处理 开源项目 EchoSharp
· 《HelloGitHub》第 106 期
· Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
· 使用 Dify + LLM 构建精确任务处理应用
点击右上角即可分享
微信分享提示