setContentType、setCharacterEncoding、pageEncoding和contentType
request.setCharacterEncoding()是设置从request中取得的值或从数据库中取出的值
response.setContentType(“text/html;charset=gb2312”)是设置页面中为中文编码
前者是设置动态文字(参数,数据库),后者设置页面静态文字
response.setContentType指定 HTTP 响应的编码,同时指定了浏览器显示的编码.
response.setCharacterEncoding设置HTTP 响应的编码,如果之前使用response.setContentType设置了编码格式,则使用 response.setCharacterEncoding指定的编码格式覆盖之前的设置.与response.setContentType相同的 是,调用此方法,必须在getWriter执行之前或者response被提交之前.
关于JSP页面中的pageEncoding和contentType两种属性的区别:
pageEncoding是jsp文件本身的编码
contentType的charset是指服务器发送给客户端时的内容编码
1.pageEncoding 可以没有pageEncoding ,有的话必须和jsp的文件保存格式的编码一样,否则中文乱码(如果jsp文件格式为utf-8,pageEncoding为gb2312时会报null错误),没有的话由contentType的charset决定
2 pageEncoding和contentType都不存在时中文肯定是乱码,tomcat默认的方式不支持中文
- 1和2说的contentType和response.setCharacterEncoding是不一样的,虽然contentType最后是 response.setContentType(“text/html; charset=utf-8”);和response.setCharacterEncoding的作用是一样的,但response.setCharacterEncoding后执行,所以浏览器的编码为response.setCharacterEncoding的,没设置response.setCharacterEncoding的话,就是contentType,没有contentType的话就是由pageEncoding决定。
4.所以页面的编码方式的优先顺序是:response.setCharacterEncoding >contentType>pageEncoding.
5.页面的编码方式与中文是否乱码没有直接关系。只要jsp转换servlet的过程中正确就能基本确保中文不为乱码(当然浏览器的编码方式必须支持中文)
- meta设置
指定网页使用的编码,该设置对静态网页尤其有作用。因为静态网页无法采用jsp的设置,而且也无法执行response.setCharacterEncoding()。例如:
如果同时采用了jsp输出和meta设置两种编码指定方式,则jsp指定的优先。因为jsp指定的直接体现在response中。
浏览器的编码方式不会随着meta的设置而改变,默认还是utf-8,所以设置了其他的编码方式还要手动选择浏览器的编码方式中文才会正常
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"%>
这样就服务器一定会是正确抓到“你好”了。
setContentType、setCharacterEncoding、pageEncoding和contentType的更多相关文章
- 关于JSP页面中的pageEncoding和contentType两种属性的区别
转自:http://blog.csdn.net/dragon4s/article/details/6604624 JSP指令标签中<%@ page contentType="text/ ...
- JSP页面中的pageEncoding和contentType两种属性
关于JSP页面中的pageEncoding和contentType两种属性的区别: pageEncoding是jsp文件本身的编码 contentType的charset是指服务器发送给客户端时的内容 ...
- 网站开发进阶(三十五)JSP页面中的pageEncoding和contentType两种属性
JSP页面中的pageEncoding和contentType两种属性 本文介绍了在JSP页面中经常用的两种属性,分别是pageEncoding和contentType,希望对你有帮助,一起来看. 关 ...
- JSP页面中的pageEncoding和contentType的区别
<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> pag ...
- pageEncoding与contentType属性
1图例分析 由图中可以看出,这个两个属性没有任何关系. 把这两个设置成不同的编码格式对中文显示不会产生任何影响 2.原因分析 pageEncoding规定了以什么编码方式存储和读取,使两者保持一致性, ...
- ContentType ,charset和pageEncoding的区别(转)
========================说法一=========================== ContentType 属性指定响应的 HTTP 内容类型.如果未指定 ContentTy ...
- contentType,charset和pageEncoding的区别
简单点总结就是jsp页面头上这样写 <%@ page contentType="text/html;charset=GBK" %> 页面用GBK编码 pageEnco ...
- jsp中的contentType与pageEncoding的区别和作用
jsp中的contentType与pageEncoding的区别和作用 <%@ page contentType="text/html; charset=utf-8" p ...
- 转!! 关于jsp编码设置 <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
我们在写jsp页面的时候经常会在页面头部使用如下代码: <%@ page language="java" contentType="text/html; chars ...
随机推荐
- toUnsignedString详解
/** * All possible chars for representing a number as a String */ final static char[] digits = { '0' ...
- nohup使用(转)
在启动weblogic的时候我们经常看到如下的命令: nohup ./startWebLogic.sh >out.log 2>&1 & 其中 0.1.2分别代表如下含义: ...
- 新浪ip地址转换接口
通过IP地址获取对应的地区信息通常有两种方法:1)自己写程序,解析IP对应的地区信息,需要数据库.2)根据第三方提供的API查询获取地区信息. 第一种方法,参见文本<通过纯真IP数据库获取IP地 ...
- JS中正则匹配的三个方法match exec test的用法
javascript中正则匹配有3个方法,match,exec,test: match是字符串的一个方法,接收一个RegExp对象做为参数: match() 方法可在字符串内检索指定的值,或找到一个或 ...
- [课程设计]Scrum 1.3 多鱼点餐系统开发进度
[课程设计]Scrum 1.3 多鱼点餐系统开发进度 Scrum 1.3 多鱼点餐系统开发进度 1.团队名称:重案组 2.团队目标:长期经营,积累客户充分准备,伺机而行 3.团队口号:矢志不渝,追 ...
- 注册noip.com动态域名的步骤
1.先打开这个网址 http://www.noip.com/ 2.点击页面右上绿色的Sing Up,进行注册 3.会出现这个页面,把这些填上 Create my hostname later这一项不打 ...
- eclipse+spket+Extjs4.2.1开发环境搭建
一.开发工具配置 1.http://www.eclipse.org/downloads/下载Eclipse,解压. 2.http://spket.com/download.html ...
- Qt 多线程和网络编程学习
一,Qt多线程类学习 QThread类,开始一个新的线程就是开始执行重新实现QThread::run(),run()是默认现实调用exec(),QThread::start()开始线程的执行,run( ...
- mysql强更改root密码
在丢失root密码的时候,可以这样 要先停掉 mysql服务 mysqld_safe --skip-grant-tables& mysql -u root mysql mysql> UP ...
- JAVA课程体系
文件流 单点登录 maven.maven私服 jenkins 小程序 支付 webservice/webapi redis 工作流 权限:shiro 高并发 springBoot dubbo 消息推送 ...