楼主: omencathay

[jsp]常见问题集锦索引贴

[复制链接]
论坛徽章:
0
81#
发表于 2006-5-7 22:18 | 只看该作者
通常来说,当请求递交到服务器端-->服务器端由servlet获得param-->执行相应的process(包括对数据库的操作)--->返回response显示给用户过程中 如果字符集不同会导致乱码问题。

当然熟悉了整个http request/response过程中经过了哪些字符集/字节转换会对理解乱码问题有一些帮助:
1. 客户端通过表单提交的请求(参数)。这里的参数编码规则是由定义在html或jsp页面头部directives决定的,如果没有特别指定则默认为iso-8859-1
2. 服务器端接受请求,在某servlet中(jsp归结到底也是servlet)获得请求参数并进行相应逻辑操作。最常用的是request.getParameter(); 方法。 如果不加任何指定,这一方法其实完成了如下的几个工作 a.从请求报文中拿到参数的byte[] b.按照默认编码规则解码(iso-8859-1)得到一个String字符串
3. 可能进行对数据库的操作,(增删改查),这里要注意同数据库的字符集统一,各数据库察看字符集的方法不同,一般都是通过查看数据字典获得
4.返回response给用户

那么为何有时候会出现乱码问题呢? 例如:从一个指定为gb2312编码的页面提交到服务器端,而服务器段直接调用request.getParameter()方法拿到字符串s,那么这个字符串直接返回到response一定会显示为乱码,因为原来的byte[]是gb2312的编码,用iso8859-1解码是一定会出错的。把字符串存入数据库和从数据库中取出字符串概念也是一样,如果数据库字符集是ascii那么rs.getString()拿到的字符串也是按ascii解码的,直接返回到response为gb2312的页面也会显示乱码.

解决方法通常有以下几种:
1. 统一所有的字符集编码,推荐(utf-8),可创建全局过滤器
在过滤器中过滤所有的request
request.setCharacterEncoding("UTF-8"(需要与客户端浏览器的字符集编码统一)
chain.doFilter(request,response);
这里可以解决服务器段获取参数时编码冲突的问题,此时再调用request.getParameter()时就不会产生编码冲突
2. 结合使用new String(byte[] byte, String charset) 和byte[] String.getBytes(String charset)方法。但要注意前者是解码(从字节流得到字符串)后者是编码(将字符串重新编码为字节流)
举例来说,如果所拿到的字符串s是按iso-8859-1解码的,而想存入字符集为gb2312的数据库那么需要做如下转换String newS = new String(s.getBytes('ISO-8859-1","gb2312"以保证拿到gb2312码的字符串,这样就不会出现由于调用数据库操作而导致的字符集问题。

以上纯属个人经验总结,如有问题欢迎指出讨论

使用道具 举报

回复
论坛徽章:
73
蒙奇·D·路飞
日期:2016-10-28 11:39:37马上有车
日期:2014-11-25 14:43:37马上有车
日期:2014-11-12 14:25:48itpub13周年纪念徽章
日期:2014-09-30 11:14:30itpub13周年纪念徽章
日期:2014-09-29 15:19:13itpub13周年纪念徽章
日期:2014-09-28 10:55:55祖国65周年纪念徽章
日期:2014-09-26 17:05:18马上有钱
日期:2014-03-22 22:02:03夏利
日期:2013-07-29 11:37:58紫蛋头
日期:2013-07-15 13:41:33
82#
发表于 2006-5-8 16:41 | 只看该作者
rs怎么是待转换的字符串呢?是结果集吧。

使用道具 举报

回复
论坛徽章:
0
83#
发表于 2006-5-10 08:20 | 只看该作者
受教了

使用道具 举报

回复
论坛徽章:
0
84#
发表于 2006-5-20 17:42 | 只看该作者
我下载的孙卫琴的书为什么解压不了???
!   Tomcat与Java.Web开发技术详解.pdf CRC 失败。文件被破坏

使用道具 举报

回复
论坛徽章:
0
85#
发表于 2006-6-10 18:19 | 只看该作者

使用道具 举报

回复
论坛徽章:
0
86#
发表于 2006-6-12 09:19 | 只看该作者
ding

使用道具 举报

回复
论坛徽章:
3
开发板块每日发贴之星
日期:2005-09-04 01:02:30授权会员
日期:2006-06-15 11:28:19开发板块每日发贴之星
日期:2006-06-16 01:02:38
87#
发表于 2006-6-15 10:33 | 只看该作者
好刀,楼主果然出手不凡!

使用道具 举报

回复
论坛徽章:
20
2008新春纪念徽章
日期:2008-02-13 12:43:03ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15鲜花蛋
日期:2011-07-07 15:01:11ITPUB9周年纪念徽章
日期:2010-10-08 09:34:032010新春纪念徽章
日期:2010-03-01 11:08:31ITPUB元老
日期:2009-10-19 22:38:19祖国60周年纪念徽章
日期:2009-10-09 08:28:00ITPUB8周年纪念徽章
日期:2009-09-27 10:21:21生肖徽章2007版:猪
日期:2008-10-19 14:40:082012新春纪念徽章
日期:2012-01-04 11:51:22
88#
发表于 2006-6-19 16:48 | 只看该作者
good

使用道具 举报

回复
论坛徽章:
0
89#
发表于 2006-6-28 09:27 | 只看该作者
顶!!

使用道具 举报

回复
论坛徽章:
0
90#
发表于 2006-7-2 09:21 | 只看该作者
辛苦了楼主

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表