Web浏览器是否能正确显示一个Web页通常依赖两个条件:
一、页面的编码(文件编码).
二、该页定义的contentType.
其中页面的编码是决定性的因素。两者一致是,浏览器会正常显示内容,否则有可能产生乱码现像。
如果一个Html文件,文件编码为UTF-8。contentType设为相同。则使用IE或Firefox查看,两者都会自动选择正确的编码形式来解释。当我将contentType设为GB2312,以为会造成乱码,结果不会。我认为原因是这样的:文件编码起决定作用,加上Utf-8包括了GB该有的字符,所以这种情况是以大的来认识小的。没问题。(不知是否有理解错误 :P)。
上述情况为使用浏览器直接把开网页文件的结果。当我使用Webwork的Action时,将Html文件作为结果时(结果类型为dispatcher),乱码出现了!文件编码为UTF-8,页面定义的ContentType为UTF-8。但是偏偏使用IE及FireFox均得到乱码的结果。郁闷中用Firefox查看了页面的属性,惊奇地发现页面编码居然是GB2312。我猜想是Webwork在Dispatch页面的时候使用了默认的编码,把本来UTF-8编码的页面重新用GB2312编码一次。于是试着在Action里面获得Response并把字符编码改为UTF-8。最后发现结果依然一样。这时,我觉得在Action完成后,Webwork接下来使用了Response,我的设置被重置了。于是决定自已写一个Servlet,指定字符编码为UTF-8,结果直接Forward到我的Html页面。结果正确了!再查看页面信息,两者都是UTF-8了。
平时使用Webwork来Dispatch的都是Jsp,不曾出现过这样的情况。原因是Jsp仍需要编译,编译时会读取Jsp页面指定的ContentType来决定Response里的字符编码。HTML文件则不一样。这时只能使用默认编码。如果我的工程是Gb2312,那根本就不存在刚才所讲的问题的。