<%@ page language="java" contentType="text/html; charset=gb2312"
pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<b>hello world , 你好,世界!</b>
</body>
</html>

如上面这段简单的JSP代码,里面有三个地方对编码进行了设置:

1. contentType 中的 charset

2. pageEncoding

3. html meta标记中的charset

那么这三个都在什么地方起到什么作用,

在说编码之前首先简单叙述一下JSP页面执行的原理,当一个JSP页面编写完成后需要将该页面发布到相应的服务器例如tomcat上,整个发布过程由包括两个小的步骤,一、将JSP翻译成Servlet(一个Java文件)。二、JSP引擎(tomcat)调用Java编译器将Servlet编译成.class文件并保存到规定的目录中。三、当用户在地址栏输入相应JSP页面的地址时,JSP引擎调用Java虚拟机来解释执行.class文件,并生成向客户端的回应信息。

下面进入正题,编码

首先讲pageEncoding,我们知道每一个文档或者页面都有相应的编码,如果不提供编码格式,程序是无法将一连串的二进制翻译出来的。JSP也一样,那么这个pageEncodinig就是指定这个JSP文件中内容的编码格式,这个编码格式告诉JSP引擎,我这个JSP是用什么编码的,你可以使用什么解码格式来读取我这个文档,并翻译成相应的Servlet。这个Servlet的格式是JSP引擎的规定的utf-8。同样Servlet编译成的.class文件也是JSP引擎规定的utf-8格式。至此pageEncoding的使命完成。如果想看看这个pageEncoding是否设置正确可以查看JSP相应的Servlet中代码是否有乱码,如果有表示pageEncoding没有设置正确。常用的编码有iso-8859-1(英文字符)、utf-8(全世界通用)、gb2312(国标,中文编码,同样支持英文)、gbk(gb2312的增强版,支持的字符更多,与gb2312相对于utf-8占用空间较大)。

在JSP页面指令中的charset是当客户端请求JSP页面时,.class文件返回页面的编码格式,假如页面中含有中文,而且pageEncoding设置正确,那么在Servlet中文会正常显示,但是如果charset设置的是英文编码例如iso-8859-1,Servlet中的中文输入到客户端浏览器就会出现乱码。

最后一个是html meta标签中的,这个标签功能与JSP页面指令charset是相同的,该标签在JSP页面中不起作用,至少我测试的是不起作用的,如果有相应页面指令则按照页面指令编码,如果没有默认utf-8,该标签不起作用,但是在普通的html中是起作用的。

我知道的就这么多了

今天一个同学问我为什么他的项目总是出现乱码,但是我把项目在我的电脑上运行就没有问题,在他的电脑上,任我怎样设置pageEncoding ,charset 都无济于事,最后只能使用new String()进行转码。回来后仔细看了一下,原来原因出现在tomcat配置上,据说是因为新版tomcat的问题,这个没有测试过,新版的tomcat(5.x以上)中使用get传递参数如果不配置server.xml文件就只能使用new String()进行转码了。配置方法

1.

这种方法配置以后应该不需配置request编码就可以正常获取中文。

2. 

这种方法设置以后需要在网页中设置request的编码格式。

最新文章

  1. Lunix 命令
  2. Android提交数据到JavaWeb服务器实现登录
  3. STL:原地归并排序模板(InplaceMergeSort)
  4. 【cs229-Lecture17】离散与维数灾难
  5. 【转】探索C++的秘密之详解extern
  6. js基础之动画(三)
  7. delphi TFileStream.create
  8. 软件测试之 LoadRunner安装\破解\汉化
  9. cdoj 韩爷的情书 有向图 欧拉路径
  10. Ceph相关博客、网站(256篇OpenStack博客)
  11. 原创:TSP问题解决方案-----禁忌搜索算法C实现
  12. [JavaScript]ECMA-6 箭头函数
  13. 机器学习入门02 - 深入了解 (Descending into ML)
  14. 牛客网数据库SQL实战(1-5)
  15. python大法好——修改文件、函数
  16. Git 代码更新:git fetch 和 git pull 的区别
  17. [Windows Azure] How to Create and Configure SQL Database
  18. Spring_Task初探(注解,XML配置)
  19. php DES加密或者解密
  20. 对Java中的异常的理解

热门文章

  1. poj1745 dp
  2. DSP using MATLAB 示例Example2.4
  3. 17996 Daily Cool Run (dp)
  4. Spring Data JPA 查询方法支持的关键字
  5. C#性能测试方法
  6. Java解析文本
  7. Hadoop学习笔记(1)
  8. Gulp探究折腾之路(I)2
  9. CentOS 6.6 安装Cacti
  10. Codeforces Round #253 (Div. 2) B - Kolya and Tandem Repeat