最近一直在做关于Servlet的事情,常常出现乱码,很是烦人,处理乱码的方法有时候有效,有时候没有效果,今天抽个时间小结一下,以防以后再出现这种问题。

一般的处理乱码的方式都是用:

request.setCharacterEncoding("GBK")

但是这种方法只对POST方法提交的表单才有效果,这就是前面提到的有时候有效果,有时候没有效果的原因。

网上资料显示:自从Tomcat5.x开始,GET和POST方法提交的信息,Tomcat采用了不同的方式来处理编码,对于POST请求,Tomcat会仍然使用request.setCharacterEncoding方法所设置的编码来处理,如果未设置,则使用默认的iso-8859-1编码。而GET请求则不同,Tomcat对GET请求并不会考虑使用request.setCharacterEncoding方法设置的编码,而会永远使用iso-8859-1编码,因此,tomcat将会使用iso-8859-1将提交的字节转换成字符串。

  鉴于此,提供一下三种解决方法:

1. 将GET请求改成POST请求,然后就可以使用request.setCharacterEncoding方法设置编码,并使用request.getParameter方法直接获得中文请求参数了,这种方法简单明了。

  2. 不用改GET请求,在Servlet中使用如下的代码来得到中文请求参数。

String name = new String(request.getParameter("name").getBytes("ISO-8859-1"), "GBK");

3.对于GET方法,还可以通过修改Tomcat的配置来搞定。

方法如下:

在conf/server.xml里的<Connector />标签内加URIEncoding="GBK",或者是UTF-8。如:

<Connector port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="GBK"/>

对于POST方法提交的表单,上面的方法二仍然有效,个人建议使用方法二,因为方法二的代码是利用了Java的编码能力,对于所有的Web服务器都会有效,而setCharacterEncoding方法是通过Web服务器支持的,并不是所有的Web服务器都会对该方法有很好的支持。

最新文章

  1. text-overflow
  2. java中集合类中Collection接口中的List接口的常用方法熟悉
  3. 通过JavaScript改变HTML样式
  4. Ibatis.Net 数据库操作(四)
  5. Android:控件的隐藏显示
  6. Centos6.5 64linux系统基础优化(一)
  7. java RSA加密解密--转载
  8. jQuery分析(1) - 介绍
  9. java组装json和提取一个json的例子
  10. Cosmos OpenSSD--greedy_ftl1.2.0(三)
  11. [Codeforces 864D]Make a Permutation!
  12. 现代控制理论习题解答与Matlab程序示例
  13. Linux查看日志工具
  14. Java高级框架——Mybatis(二)
  15. python算法之冒泡排序和选择排序
  16. python中input和raw_input函数
  17. bzoj 1835 base 基站选址 - 动态规划 - 线段树
  18. 【转】java面试题
  19. 20155311 Exp3 免杀原理与实践
  20. 题外话:我想立刻辞职,然后闭关学习编程语言,我给自己3个月时间学习C语言!这样行的通吗

热门文章

  1. 树莓派研究笔记(5)-- FM网络收音机
  2. CodeForces 670D2 Magic Powder - 2 (二分)
  3. WebGoat系列实验Cross-Site Scripting (XSS)
  4. Fiddler系统监控参数解读
  5. tftp命令详解
  6. C#知识点总结系列:3、C#中Delegate和Event
  7. WebStorm设置Themes
  8. linux定制的补充
  9. 在eclipse中使用hadoop插件
  10. unity网络延迟