标签:
我们可以发现我们的工具eclipse或者myeclipse有很强的功能,我们很少见到jsp页面的乱码问题,这是为什么呢?这是因为eclipse很智能,会根据pageEncoding="UTF-8"这个page指令,保存的时候就会提前预知服务器要使用utf-8进行解码,因此保存的时候会根据pageEncoding="UTF-8"智能的为我们写的jsp保存为utf-8格式.但是当我们使用记事本或者其他文本工具进行开发,就会很容易造成乱码,这里我将详细的分析乱码的原因,以及如何解决乱码。
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title></title> <meta http-equiv=" pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> </head> <body> 中国 </body> </html>
我们发现没有产生乱码,接下来我们将分析这个过程是怎么进行的。
乱码情况1:
当jsp页面第一次被访问的时候,jsp引擎将jsp文件翻译成servlet,此时如果不明确指定,jsp引擎默认是使用utf-8进行翻译的,如果当初保存jsp所用的编码和jsp引擎翻译使用的编码不一样就会造成乱码。
jsp页面指令中有一个属性pageEncoding属性,用来通知jsp翻译引擎翻译jsp文件的时候使用什么编码,要想解决第一种乱码,只需将pageEncoding值设置为当初保存jsp页面时的编码就可以了。
乱码情况2:
当翻译过来的Servlet如果要输出中文“中国”到浏览器,因为out相当于response.getWriter(),如果不指定编码服务器发送数据是将字符转为字节时使用的是iso8859-1,另外除了控制服务器使用的编码,还要通知浏览器以什么编码打开才能解决乱码问题。
在jsp的page指令中有一个Content-type属性这个属性在翻译过来的servlet中写上response.setContentType(),从而可以解决第二种乱码问题提。
好消息:
只要设置了pageEncoding属性,自动就会指定Content-type属性与其使用一样的编码。
原理图:
标签:
原文地址:http://blog.csdn.net/u014010769/article/details/46573877