pageEncoding与contentType的区别(转)

在JSP标准的语法中,如果pageEncoding属性存在,那么JSP页面的字符编码方式就由pageEncoding决定,

否则就由contentType属性中的charset决定,如果charset也不存在,JSP页面的字符编码方式就采用默认的ISO-8859-1。

ContentType属性指定了MIME类型和JSP页面回应时的字符编码方式。MIME类型的默认值是“text/html”; 字符编码方式的默认值是“ISO-8859-1”. MIME类型和字符编码方式由分号隔开。

pageEncoding的内容只是用于jsp输出时的编码,不会作为header发出去的。pageEncoding是通知web server jsp的编码。

pageEncoding是jsp文件本身的编码

contentType的charset是指服务器发送给客户端时的内容编码

JSP要经过两次的“编码”,第一阶段会用pageEncoding,第二阶段会用utf-8至utf-8,第三阶段就是由Tomcat出来的网页, 用的是contentType。

第一阶段是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就发挥了功效

contentType的設定.

pageEncoding 和contentType的预设都是 ISO8859-1. 而随便设定了其中一个, 另一个就跟着一样了(TOMCAT4.1.27是如此). 但这不是绝对的, 这要看各自JSPC的处理方式. 而pageEncoding不等于contentType, 更有利亚洲区的文字 CJKV系JSP网页的开发和展示, (例pageEncoding=GB2312 不等于 contentType=utf-8)。

jsp文件不像.java,.java在被编译器读入的时候默认采用的是操作系统所设定的locale所对应的编码,比如中国大陆就是GBK,台湾 就是BIG5或者MS950。而一般我们不管是在记事本还是在ue中写代码,如果没有经过特别转码的话,写出来的都是本地编码格式的内容。所以编译器采用 的方法刚好可以让虚拟机得到正确的资料。

但是jsp文件不是这样,它没有这个默认转码过程,但是指定了pageEncoding就可以实现正确转码了。

举个例子:

<%@ page contentType="text/html;charset=utf-8" %>

大都会打印出乱码,因为输入的“你好”是gbk的,但是服务器是否正确抓到“你好”不得而知。

但是如果更改为

<%@ page contentType="text/html;charset=utf-8" pageEncoding="GBK"%>

这样就服务器一定会是正确抓到“你好”了。

时间: 2024-08-04 09:53:06

pageEncoding与contentType的区别(转)的相关文章

HTTP协议中的Accept与Content-Type的区别

HTTP协议中的Accept与Content-Type的区别 2018.06.07 22:53 19110浏览 在开发REST服务时,不可避免的需要了解HTTP协议的内容,其中,我们经常会用到 Accept 与 Content-Type,那么这两者有什么区别和联系呢? 1. 类型不同 类型不同Accept属于请求头, Content-Type属于实体头. Http报头分为通用报头,请求报头,响应报头和实体报头. 请求方的HTTP报头结构:通用报头|请求报头|实体报头 响应方的HTTP报头结构:通

pageEncoding和charset的区别

pageEncoding是jsp文件本身的编码 contentType的charset是指服务器发送给客户端时的内容编码 JSP要经过两次的“编码”,第一阶段会用pageEncoding,第二阶段会用utf-8至utf-8,第三阶段就是由Tomcat出来的网页, 用的是contentType. 第一阶段是jsp编译成.java,它会根据pageEncoding的设定读取jsp,结果是由指定的编码方案翻译成统一的UTF-8 JAVA源码(即.java),如果pageEncoding设定错了,或没有

Http报头Accept与Content-Type的区别

1.Accept属于请求头, Content-Type属于实体头. Http报头分为通用报头,请求报头,响应报头和实体报头. 请求方的http报头结构:通用报头|请求报头|实体报头 响应方的http报头结构:通用报头|响应报头|实体报头 2.Accept代表发送端(客户端)希望接受的数据类型. 比如:Accept:text/xml; 代表客户端希望接受的数据类型是xml类型 Content-Type代表发送端(客户端|服务器)发送的实体数据的数据类型. 比如:Content-Type:text/

CGI头声明格式:Context-Type与Content-Type的区别

同样是POST模式下,开头声明的printf格式Context-Type与Content-Type却有很大不同. Context-Type:  printf("Context-Type:text/html;charset=UTF-8\n\n"); -----网页不识别html格式语言,都原样输出在网页上.如果cgi里面没有html格式语言,只是做其他处理,对结果没有影响. Content-Type:    printf("Content-Type:text/html;char

Http报头Accept与Content-Type的区别(转)

1.Accept属于请求头, Content-Type属于实体头. Http报头分为通用报头,请求报头,响应报头和实体报头. 请求方的http报头结构:通用报头|请求报头|实体报头 响应方的http报头结构:通用报头|响应报头|实体报头 2.Accept代表发送端(客户端)希望接受的数据类型.  比如:Accept:text/xml; 代表客户端希望接受的数据类型是xml类型 Content-Type代表发送端(客户端|服务器)发送的实体数据的数据类型. 比如:Content-Type:text

Accept 与 Content-Type 的区别

定义 Accept:用于在http请求报头,指明客户端接受那些类型的数据. content-type: 用户指明本次(客户端或服务器)发送的数据类型 举个栗子 客户端 GET https://www.cnblogs.com/mvc/blog/ViewCountCommentCout.aspx?postId=6388464 HTTP/1.1Host: www.cnblogs.comConnection: keep-aliveAccept: application/json, text/javasc

JSP中文乱码问题《转》

之前总是碰到JSP页面乱码的问题,每次都是现在网上搜,然后胡乱改,改完也不明白原因. 这次正好作下总结,中文乱码就是因为编码不符,可能出现乱码有四个地方: 1 JSP编码乱码 2 HTML编码乱码 3 request获取数据乱码 4 response输出信息乱码 5 Cookie导致的编码问题 下面将会对上面几种情况进行介绍: JSP乱码 这种是最常见的,设置编码的位置位于JSP的第一行,如果在Eclipse中新建一个JSP默认是下面这种: <%@ page language="java&

1、第一个JSP

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" contentType="text/html; UTF-8"%> <!DOCTYPE HTML"> <html> <head> <title>My JSP 'index.jsp' starting page</title

Java Web学习(9):解决JSP中文乱码问题

之前总是碰到JSP页面乱码的问题,每次都是现在网上搜,然后胡乱改,改完也不明白原因. 这次正好作下总结,中文乱码就是因为编码不符,可能出现乱码有四个地方: 1 JSP编码乱码 2 HTML编码乱码 3 request获取数据乱码 4 response输出信息乱码 5 Cookie导致的编码问题 下面将会对上面几种情况进行介绍: JSP乱码  这种是最常见的,设置编码的位置位于JSP的第一行,如果在Eclipse中新建一个JSP默认是下面这种: <%@ page language="java