jsp文件编码和pageEncoding 的不一致,会影响jsp解析引擎对jsp文件的解析,从而导致乱码。下面我们 从 IDE开发环境 和 非 IDE开发环境 两种情况说说。其中真的有好多“坑人的猫腻”。
1) 非IDE开发
初学j2ee开发,老师们都是建议自己从零开始创建文件、文件目录来搭项目文件结构。
假如我们使用windowsOS 并且 OS默认编码是GBK,也即当我们手动创建一个JSP文件(名 为index.jsp)时,此文件的编码格式是GBK的。
我们会继续照着手中的教科书的案例中写jsp代码:
然而书中的案例中,pageEncoding="UTF-8"。当我们启动tomcat并访问,会发现:中文乱码 !!
上面的情景,是大多数初学者都会遇到的。乱码的原因在于,小白没有理解 pageEncoding 的作用。
pageEncoding="UTF-8",意思是告诉tomcat中的jsp解析引擎“这个文件内容都是 utf-8 编码格式的”,jsp引擎读入文件后解析时,中文部分的字节序列由于不符合utf-8的格式规律又再被强制转码成内码utf-16,当然最后就不成样了(乱码)。
因此,jsp文件的格式 务必要 跟 pageEncoding值 一致。
2) IDE开发环境
IDE,拿 Ideaj 作为例子。
当我们在Ideaj中 建立项目和jsp文件,智能的Ideaj 会 偷偷帮我们做好多事情,文件编码转换 就是其中一个。
jsp文件中,当我们 pageEncoding = utf-8 ,Ideaj会立马识别并将此jsp文件转化成utf-8。同样,当我们 pageEncoding = GBK ,Ideaj也会立马识别并将此jsp文件转化成GBK 。
坑爹的是,这些Ideaj偷偷地行为,我们非常难发现!于是就使劲 在网上查询,套遍了网上的道理,还是无法找到根本的解决方法。如此久了,真的被坑到怀疑人生。
不过虽说IDE的“偷偷摸摸”让我们迷糊。可是不得不否认IDE真的帮我们解决了好多繁琐事情。
其实,我们学习程序消耗的时间有很大部分是浪费在这些排查上,这也是我写这系列博文的缘由。