我们在eclipse中编辑jsp页面时首先会确认jsp文件本身的编码,比如有utf-8,gkb等等。一般情况下,如果在jsp的开头定义了pageEncoding的话,那么文件的编码就是pageEncoding了。
一般jsp文件的编码格式都是和pageEncoding一样的。pageEncoding决定着在jsp编译器进行编译时所使用的编码格式。
1.pageEncoding和jsp文件编码都是GBK
拿“中”字来看一下,编辑好jsp文件后,用HexEdit查卡器可以查看到文件的十六进制编码,可以看到“中”采用GBK解码的十六进制为“D6D0”,在后台进行解码时,jsp编译器会根据pageEncoding解码,所以得到“D6D0”对应的字符“中”;在这时生成java文件时,java文件是utf-8编码,所以将“中”按照utf-8字符集的解码方式生成java文件,“中”在utf-8中的十六进制编码为“E4B8AD”,同样可以通过HexEdit来查看。
2.pageEncoding=“GBK”,文件编码为utf-8
也拿“中”字来看。用HexEdit打开jsp文件,文件中的“中”字采用utf-8编码,为“E4B8AD”。
这是jsp编译器还是按照pageEncoding来进行解码,在GBK字符集中,没有对应“E4B8AD”的字符,所以出现乱码字符(假如乱码字符为?)。这是再按照utf-8生成java文件时,乱码字符对应的机内码转换仍是错误的,所以jsp生成的java文件中就会出现乱码。java文件乱码,javac按照Utf-8》utf-8转换时,仍然是乱码。所以web服务器最终返回的页面显示为乱码。