jsp 页面显示中文乱码:
jsp 页面的编码方式有两个地方需要设置:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ page contentType="text/html;charset=utf-8"%>
其中: pageEncoding 指的是 jsp 文件本身在本地保存时的编码方式。 contentType 的 charset
是指服务器发送网页内容给客户端时所使用的编码。
从第一次访问一个 jsp 页面开始,到这个页面被发送到客户端,这个 Jsp 页面要经过三次编
码转换:
第一阶段是 jsp 编译成 .java,它会根据 pageEncoding 的设定读取 jsp,结果是由指定的编码
方案翻译成统一的 UTF-8 JAVA源码(即 .java),如果 pageEncoding 设定错了,或没有设定,
出来的就是中文乱码。
第二阶段是由 JAVAC的 JAVA源码至 java byteCode 的编译,不论 JSP编写时候用的是什么编
码方案,经过这个阶段的结果全部是 UTF-8 的 encoding 的 java 源码。
JAVAC用 UTF-8 的 encoding 读取 java 源码,编译成 UTF-8 encoding 的二进制码(即 .class),
这是 JVM 对常数字串在二进制码( java encoding)内表达的规范。
第三阶段是 Tomcat(或其的 application container )载入和执行阶段二的来的 JAVA二进制码,
输出的结果,也就是在客户端见到的,这时隐藏在阶段一和阶段二的参数 contentType 就发
挥了功效
所以最终的解决方法为:
在 jsp 页面设置 pageEncoding 或者 contentType 的其中一个为支持中文的编码格式 (如 utf-8 ,
gbk,gb2312)。因为设置一个的话,另一个默认会和它一样。
如果两个都设置的话,必须保证两个都是支持中文编码(不一定要一样) 。
最佳建议设置如下:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ page contentType="text/html;charset=utf-8"%>