servlet过滤器中应该注意的字符编码问题

今天学习《Tomcat与java web开发技术详解》中过滤器一章,也做了实验。第一个例子很简单,结果很容易就出来了,第二个例子有点复杂,我做了好久,一直是乱码。其中,我也System.out.println()看了下字符串是对的,查看网页源代码也是对的,就是乱码,后来发现以GB2312编码来看的时候是正常的。

   这说明是字符编码的问题,将filter去掉的时候,网页显示是正常的,加上过滤器就不行,最后将错误定位到过滤器中出现了编码问题。

但是转念一想,不对,那为什么第一个过滤器就没有这个问题,而第二个过滤器就出现了呢?我仔细比较了两个过滤器的不同之处,除了功能上的不同,两者仅仅有一处差别:第二个过滤器中有新建String的动作,而第一个过滤器没有。

我立马查了下文档,new String()在不指定编码的情况下,会采用系统默认的字符编码创建字符串,而我在response中设置的字符编码是utf-8,但是系统默认编码是GB2312,所以网页乱码。

问题终得解决!!

感觉自然是爽,但是也说明了我以前学习java是多么的三心二意,String的编码折腾了我这么久。以后要加强基础的学习。下面我将我的代码贴出。












posted @ 2012-01-02 21:15  dvking  阅读(1252)  评论(0编辑  收藏  举报