一、JSP中文乱码的根源
1.JSP程序存在有与Servlet程序完全相同的中文乱码问题
- 输出响应正文时出现的中文乱码问题
- 读取浏览器传递的参数信息时出现的中文乱码问题
2.JSP引擎将JSP页面翻译成Servlet源文件时也可能导致中文乱码问题
- JSP引擎将JSP源文件翻译成的Servlet源文件默认采用UTF-8编码,而JSP开发人员可以采用各种字符集编码来编写JSP源文件,因此,JSP引擎将JSP源文件翻译成Servlet源文件时,需要进行字符编码转换。
- 如果JSP文件中没有说明它采用的字符集编码,JSP引擎将把它当作默认的ISO8859-1字符集编码处理。
3.如何解决JSP引擎翻译JSP页面时的中文乱码问题
- 通过page指令的contentType属性说明JSP源文件的字符集编码
- page指令的pageEncoding属性说明JSP源文件的字符集编码
- 在部署描述符中说明一组JSP源文件的字符集编码
<jsp-property-group>
<url-pattern>/jsp/*</url-pattern>
<page-encoding>GB2312</page-encoding>
</jsp-property-group>
</jsp-config>
二、JSP引擎翻译,JSP页面时的中文乱码问题
1.编写内容如下的JSP文件:
<%
out.println("hello中国");
%>
2.用浏览器和telnet程序查看返回结果
3.分析生成的Servlet源文件内容
4.分析乱码原因
5.解决措施
6.JSP源文件内容与输出内容编码不一致的实验
7.内容以中文字符开始的JSP源文件的实验
8.在部署描述符文件中说明JSP源文件的字符集编码的实验
三、静态引入时的中文乱码问题
动手体验:静态引入时的中文乱码问题
四、<jsp:param>标签传递中文参数时的问题
动手体验:<jsp:param>标签传递中文参数时的问题
五、JSP程序所涉及到的字符编码转换
六、JSP中文乱码的总结分析
1.可能原因:
- Servlet程序从请求消息中获取请求参数和从数据库、文件、键盘等外设中读取一个字符串时都要将底层的字节流转换成字符串,但转换过程中指定的字符集编码与外设所输入内容的字符集编码不一致。如果某个第三方API将底层设备中的字节流数据总是按ISO8859-1转换成字符串返回,那么,对于底层设备中的GB2312编码的中文字符来说,返回的将不是其正确的Unicode码,这时候可以通过如下语句来解决:
- Servlet程序将字符串输出到浏览器、屏幕、文件和数据库时都要将字符串转换成底层的字节流,但转换过程中指定的字符集编码与外设所能显示的字符集编码不一致。
- JSP引擎将JSP源文件翻译成Servlet源文件时,其选择的字符集编码与JSP源文件实际使用的字符集编码不一致。
- JSP引擎编译由JSP源文件翻译成的Servlet 源文件时,其选择的字符集编码与Servlet 源文件的字符集编码不一致。
2.诊断方法:
- 使用System.out.println语句在命令行窗口中打印出现乱码的字符串
- 跟踪某个中文字符在JSP页面运行过程中的每个阶段的编码值