在JSP开发中,经常出现乱码的问题,如例程10-24所示。
例程10-24 可能出现乱码的页面(luanma.jsp)
|
对于不同的Web服务器和不同的JDK版本,它们处理的结果不一样。比如使用Tomcat 4.03作为Web服务器,执行这个页面时结果如图10-13所示。
如果在Tomcat 5.0+JDK 1.4.1下运行这个页面,那么就不会出现乱码的问题。这个问题是由于服务器使用的编码方式不同和浏览器对不同编码字符显示结果不同而导致的。我们可以在浏览器里手工指定使用简体中文编码,如图10-14所示。
![]() |
| 图10-13 出现乱码的页面 |
![]() |
| 图10-14 手工指定浏览器使用的编码 |
这样,显示的字符就正常了。可是对于普通的客户来说,这种方式是不可行的。其实我们可以在JSP页面中指定编码的方式,以消除乱码,如例程10-25所示。
例程10-25 指定编码的方式(bianma.jsp)
|
在bianma.jsp页面中,使用page指令手工指定页面的编码方式为“gb2312”,这样,对于不同的应用服务器和JDK,都不会出现乱码的问题。
对于请求的表单中的数据,如果有中文,也会出现这个情况。编写一个request_cn.jsp页面,代码如例程10-26所示。
例程10-26 request_cn.jsp
<% |
request_cn.jsp直接把请求的参数打印出来,再编写一个表单,如例程10-27所示。
例程10-27 编写一个表单
<form action="request_cn.jsp" method="get"> |
我们在Tomcat 4.03下运行这个程序,在表单中输入一些中文,如图10-15所示。
提交上面的中文,request_cn.jsp执行的结果将是乱码,如图10-16所示。
![]() |
| 图10-15 在表单中提交中文 |
![]() |
| 图10-16 request_cn.jsp的执行结果 |
下面,我们把request_cn.jsp改为以下的内容,如例程10-28所示。
例程10-28 改变后的request_cn2.jsp
<%@ page contentType="text/html; charset=gb2312"%> |
也就是指定字符编码的方式为gb2312,同样在表单中输入一些中文,这次执行的结果如图10-17所示。
![]() |
| 图10-17 修改后的request_cn.jsp执行结果 |
当输入3个中文字符后,出现了6个问号。这是因为浏览器默认使用UTF-8编码方式发送请求,而UTF-8和GB2312编码方式表示字符时不一样,这样就出现了不能识别字符的错误。那么怎么解决?可以通过一个字符编码的函数来解决,就是把请求通过iso-8859-1来编码,如例程10-29所示。
例程10-29 对请求重新进行编码(request_cn3.jsp)
|
通过以上的转换,运行就正常了!问题虽然解决了,但是耗费了很大的力气。其实有一个更加简单的方法,如例程10-30所示。
例程10-30 request_cn4.jsp的最终版本
|
可以看出,通过request.setCharacterEncoding("gb2312")对请求进行了统一的编码,就实现了中文显示正常的问题。
注意:对于一些最新的服务器,它们可能不需要做任何处理就可以正常显示中文,比如Tomcat 5.0。但是对于某些服务器或者其他较老的版本,还需要使用上面介绍的方式来进行字符转换。
| 回书目 上一节 下一节 |
|
· SQL Server入门到精通.. · 交换技术配置手册技术.. · 超级网管员——网络应.. · 网络服务器配置与应用.. · Linux集群技术自测试题.. · JavaSript核心技术自测.. |
· ARP攻击与防范技术自测.. · 国庆挑战自己参加自测 .. · 《网管员必读—网络应.. · 历次技术自测 获奖网友.. · 51CTO国庆七天技术自测.. · 9.2.2 无线AP |
|
|||
| · 网管系统介绍 · 网络管理系统如何支撑I.. · CISSP认证成长之路 · 51CTO国庆充电专题之好.. · 网络技术经典基础教程 · 51CTO主编推荐经典专题 · RAID——磁盘阵列基础 · 充电计划之热门IT认证.. |
· 51CTO技术自测 挑战自.. · AMD Phenom三核处理器.. · 国际文档格式标准开战 · 2007年互联网大会 · 我是黑客我怕谁——讲.. · ARP攻击防范与解决方案 · Solaris 10 配置管理 · Solaris基础知识入门 |
||
|
|||
| · Java基础教程 · VPN技术 · ARP攻击防范与解决方案 · SQL Server 2005全解 · SOA 面向服务架构 · SQL Server 2005全解 · Java编程开发手册 · RAID——磁盘阵列基础 |
· 三层交换技术专题 · SQL Server入门到精通 · Windows Server 2003企.. · Windows远程桌面应用 · C#技术开发指南 · VPN技术 · C#技术开发指南 · Solaris 10 配置管理 |
||
|
|||
| · ARP攻击防范与解决方案 · VPN技术 · SQL Server 2005全解 · Java基础教程 · SQL Server入门到精通 · SQL Server 2005全解 · SOA 面向服务架构 · Java编程开发手册 |
· C#技术开发指南 · 三层交换技术专题 · C#技术开发指南 · Windows远程桌面应用 · RAID——磁盘阵列基础 · Windows Server 2003企.. · 邮件服务器专题 · wimax技术与趋势 |
||
| ·DB2 Viper快速入门 ·DB2 9数据库的镜像分割与.. |
·将XML应用程序从DB2 8.x.. ·DB2 9中的pureXML:如何.. |
| ·服务器中的“傻瓜机”在.. ·盖茨也喜欢登录Youtube看.. |
· · |
| ·体验Windows Server 2008.. ·将超星图书转成PDF文档 |
·使用 Office Communicati.. ·VMware Workstation 6.01.. |
| ·强烈质疑“步行1公里就能.. ·国庆期间新闻回顾:微软.. |
·9月第3周回顾:微软和英.. ·9月第2周回顾:四核之战.. |
| · 华为、贝恩资本22亿美元.. · NGN:下一代网络 · 网络访问中断大排查 |
· 教你使用Anti ARP Sniff.. · 网络嗅探教程:使用Snif.. · 常见病毒手工清除方法大.. |
| · C++是垃圾语言?! · 2007年IT界七大抄袭事件 · Java实用开发全集 |
· 解析Ajax开发框架 走进A.. · 基于Google Maps与Ajax.. · 基于Google Maps与Ajax.. |
| · 热门 IT 培训认证官方资.. · Ubuntu 中文开源频道 · Solaris基础知识入门 |
· Google推出唯一硬件——.. · 硬盘之父获得诺贝尔物理.. · 理性面对四核服务器选购 |
| · 甲骨文Oracle 11g正式发.. · Oracle数据库开发之PL/S.. · Oracle数据库开发基础教.. |
· 硬盘之父获得诺贝尔物理.. · 存储2006,一个并购的大.. · IDC宣布浪潮蝉联存储市.. |