pageEncoding: 是jsp文件本身的编码(也就是JSP编译成Servlet时要知道文件的使用的编码才能编译), 跟页面显示的编码没有关系。
如果你的是WIN98, 或 ME 的NOTEPAD记事本编写JSP, 就一定是常用的是Big5 或 gb2312, 如果是用 WIN2k winXP的记事本时, 保存时就可以选择不同的编,码, 包括 ANSI(BIG5/GB2312)或 UTF-8 或 UNIONCODE(估是 UCS 16).
contentType: 指定了JSP页面回应时的字符编码方式。字符编码方式的默认值是ISO-8859-1
pageEncoding:还有一个功能,就是在JSP中不指定contentType参数,也不使用 response.setCharacterEncoding方法时,指定对服务器响应进行重新编码的编码。
也就是如果:pageEncoding属性存在,那么JSP页面的字符编码方式就由pageEncoding决定, 否则就由contentType属性中的charset决定,如果charset也不存在,JSP页面的字符编码方式就采 用默认的ISO-8859-1。
如果ContentType中指定charset为GBK,而pageEncoding指定UTF-8,这样header中会发送什么数据呢?发送的数据是UTF-8
3. pageEncoding和contentType的关系:
1. pageEncoding是jsp文件本身的编码,是告诉web服务器 jsp页面是什么编码。
JSP要经过两次的“编码”,第一阶段会用pageEncoding,第二阶段会用utf-8至utf-8,第三阶段就是由Tomcat 出来的网页, 用的是contentType
2. 第一阶段是jsp编译成.java的过程,它会根据pageEncoding的设定读取jsp,结果是由指定的编
码方案翻译成统一的UTF-8 JAVA源码(即.java).
3. 第二阶段是将JAVA源码编译成java 字节代码.class的过程, JAVAC用UTF-8编码读取java源码,
编译成UTF-8编码的二进制码(即.class),
4. 第三阶段是Tomcat(或其的application container)载入和执行阶段二的来的JAVA二进制码,
输出结果到客户端见到的页面,这时contentType就发挥了功效。
==================================================================================
4. 和contentType效果一样的设置方式还有: 1: html页面charset
<%@page contentType=\"text/html; chareset=gbk\"%>
. 要在head标签中
2: response.setContentType(\"text/html;charset=UTF-8\"); response.setCharacterEncoding() 其中:response.setContentType()优先级最好,
其次是response.setCharacterEncoding(); :服务器在将数据发送到浏览器前,对数据进行重新编码. 再者是 <%@page contentType=\"text/html; chareset=gbk\"%>,
最后是.
对于servlet中设定字符集:
request.setCharacterEncoding(\"UTF-8\"), 能修改Serverlet获取请求的编码,
response.setContentType(\"text/html;charset=UTF-8\");, 能修改Serverlet返回结果的编码.
=================================================================================
========================================编码====================================== ASCII
常见的英文字符,数字,以及标点符号。用一个字节表示,一共可表示256个字符,对于使用英文的国家来说
已经足够,但是对于像中国,1个字节不足以表示所有的字符,所以在ASCII的基础上,对其进行拓展,形成了自己的字符集和编码方式。
ANSI
不同的国家地区制定了不同的标准表示自己的字符,如: 中国大陆:GBK18030 与GB2312兼容 中国台湾:BIG5 日本:SJIS
这些编码统称为ANSI编码。在简体中文系统下,ANSI编码代表的就是GB2312,而在繁体中文系统下,ANSI 代表的就是BIG5。ANSI对ASCII是兼容的,既是不同的ANSI编码对ASCII字符的码值都是一样的, 但是不同的ANSI编码之间是不兼容的(如简体中文和繁体中文是有区别的),对于纯文本来说只有一种编码方式,因此你 不能在一个ANSI编码的文本中存储不同的语言文字。例如:在ANSI编码的文本中不能既输入简体又输入繁体中文, 那么在简体中文系统中,简体中文可以正确显示,而繁体中文则是乱码;相反的,在繁体中文系统中,繁体中文可以正 确显示,而简体中文则是乱码。为了解决这个问题,就出现Unicode编码。
到底什么是ANSI,什么是UNICODE呢?
其实这是两种不同的编码方式标准,ANSI中的字符采用8bit,而
UNICODE中的字符采用16bit。8bit的ANSI编码只能表示256种字符,表示26个英文字母是绰绰有余的,但是表示 汉字,韩国语,日语等有着成千上万个字符的非西方字符肯定就不够了,正是如此才引入了UNICODE标准。Unicode 采用两个字节对所有的语言进行统一编码。Unicode编码的文本中能够存储不同国家的语言文字了。ANSI编码不行。 它对ASCII码也是兼容的。Unicode共可以表示65536个字符,但是也不够用目前是够用了,应对于将来的可能情况, 还有4个字节的Unicode编码。因此Unicode分为ucs-2和ucs-4编码。
UTF-8
UTF是通用字符编码传输格式。根据最小编码单位分为UTF-8,UTF-16,UTF-32。
UTF-8是Unicode的其中一个使用方式。UTF-8能够使不同语言和编码的文字在不同的计算机上使用,以满足跨 语言、跨平台进行文本转换、处理的要求。
开始→控制面板→日期、时间、语言和区域设置→区域和语言选项→高级下拉框中选择的是什么,ANSI就是 什么。
pageEncoding=” UTF-8” 就是指该文件保存的编码方式是:UTF-8
如果用GBK则保存文件时:用默认编码格式:ANSI.
错误的做法:指定jsp是utf-8格式的文件。保存时却是:ASNI 则运行时:静态的中文就乱码 原因:pageEncoding 指定的编码和保存的编码不一致。
同理: