日期:2014-05-16 浏览次数:20399 次
<%@ page contentType="text/html" pageEncoding="GBK" %>
每一个JSP页面中的首行都是以上的内容,其实这一行代码的contentType中还隐藏了一个charset=“编码类型”;
我们知道,JSP本质上就是一个Servlet(JSP可以完成的功能Servlet全都可以完成,反之不行),而Servlet就是一个JAVA类,所以一个JSP页面编写完成之后执行的时候,Tomcat就会自动将其翻译成*.java,然后再由*.java编译成*.class文件,然后当用户访问JSP页面的时候由Tomcat或其他容器来执行*.class文件。
pageEncoding是JSP文件本身的编码,而contentType中的charset是服务器发送给客户端时的内容编码。
下面来做一个小测验就知道这两者的差别了,首先我们新建一个简单的jsp页面,可以看到里面只是简单的输出了一句话“测试pageEncoding和contentType中的charSet的区别!”,其中包含中文和英文字符,pageEncoding编码方式设为“GBK”:
<%@ page contentType="text/html" pageEncoding="GBK"%> <html> <head> <title>登陆验证</title> </head> <body> <%="测试pageEncoding和contentType中的charSet的区别!"%> </body> </html>很显然,启动Tomcat程序运行没有任何问题,可以输出。 我们现在修改上面的代码,在pageContent中加入charset=utf-8 ,即:<%@ page contentType="text/html;charset=utf-8" pageEncoding="GBK"%>
这样我们再刷新页面会出现中文乱码
但是这种乱码却可以通过改变浏览器的编码方式来解决,在浏览器空白处右键-->编码,选择Unicode(UTF-8)即可。
那我们现在再来改一下,我们将pageEncoding改为utf-8;即:
<%@ page contentType="text/html" pageEncoding="utf-8"%>
这样很明显,JSP在编码的时候将采用utf-8;默认的charset也是utf-8 ,这个时候刷新,页面中又出现了乱码。
在此基础上,我们改变charset=gbk再来看一下效果,此时浏览器的编码为utf-8:
修改浏览器编码为GBK:
可以看到,当pageEncoding编码为UTF-8时无论如何,用户访问JSP页面的时候,内容都是中文乱码。
为什么会这样,pageEncoding和contentType中的charset区别到底在哪里?
网上搜索了一下,我认为下面的这个解释说的挺好,挺详细的。