![]() |
|
| 网站首页 | 数据库教程 | web编程 | 服务器 | 程序设计 | | ||
![]() |
||
|
||
|
||||||
故人相逢不相识---再遇中文乱码问题 | ||||||
作者:佚名 文章来源:不详 点击数: 更新时间:2007-9-2 ![]() |
||||||
关键字【java 乱码 中文】
自己也自认中文乱码问题解决专家了,从大学时开始写第一个jsp页面到现在,经历的乱码问题不胜其数,那些貌似解决了的问题总会在某个无聊的下午蹦出来,然后花费自己数小时的时间去调试,甚烦. 后来每次都总结,终于得出规则5条,相当满意。
第一:所有的地方都设置统一编码 所谓所有的地方,包括,但不限于,页面编码\数据库编码\请求(action)过滤器编码\eclipse项目属性默认编码等 第二:如果采用了某框架,很可能需要再次在其配置文件中设置编码,改变默认值,比如struts2(其实是webwork2.2)的struts.properties。 第三:能用gb18030的情况尽量不要用gbk,能用gbk的地方尽量不用gb2312 第四:如果有了编码问题,需要从输入到输出逐一判断,一一排查,不要直接从中间处理的部分手动转换编码. 第五:如果需要设置字符集过滤器(tomcat中自带了一个很有名的Set Character Encoding,没必要重复发明轮子。如果用了spring的话,那么可以用spring提供的增强版),那么本过滤器要设置在所有过滤器的最前面---比如用了hibernate的OpenSessionInView或者webwork的参数装配、文件上传过滤器。原因很简单,过滤器是堆栈型模式,我们要保证传过来的字符先经过编码,然后进入处理逻辑,从处理逻辑中访问数据库,然后返回到处理逻辑,然后返回到编码过滤器...但看起来好像过滤器是按链式工作的. 可能还有些规则来着,暂时想不起来。 然后当我总结过这么的规则时,每次遇到汉字问题都能蒙混过关。因为说实话,咱对他们的实现机理没有什么很深的理解。 好了,今天又遇到一个问题,真是长了见识。 前提,struts2+spring2+hibernate3 从页面中提交汉字到struts2,经hibernate3提交到数据库,然后回显到列表页面,汉字一路畅通。 问题是,我要按关键字名字去查询相关文档时(关键字链接,没有用到form提交,否则肯定没问题),走到action里就是乱码了,然后去数据库里肯定找不到想要的数据了。 简单分析了一下,发现是汉字参数直接做为url地址一部分的问题。 我记得原来有个方法来着,好像就是将要传的汉字先编码:name=java.net.URLEncoder.encode(”我是汉字”)---]http://domain/search?nameParameter=[%name%],然后在处理逻辑中直接name=new String(nameParameter.getBytes(”8859_1”)); 每次都转换,笨但能解决问题。 现在又遇到了,还是在struts2的标签里,笨法也不能用了。 怎么半? 忽然想起来url的参数编码可以在tomcat里设置的,那直接改改得了。 但不知道怎么改。 google。 去${Tomcat_home}/conf/server.xml,增加了connector的编码为:URIEncoding=”utf-8”(为什么是utf-8?因为我说的第一条所有地方都一致,这里的utf-8就是和所有地方一致),重启,搞定。 真的搞定了么? 没有,因为我刚刚发现又要添一个新规则了: 规则六:如果还没有解决所有的乱码问题,请自定义规则七。 羡慕那些工作在.net平台上的同志们,羡慕那些用java编程但从来没遇到过乱码问题的同志们,羡慕那些无论使用了什么框架什么技术什么引擎从来都能避免乱码发生的同志们,羡慕那些一遇到乱码就立刻发现问题并解决了的同志们。 本文来源:http://blog.csdn.net/patriotlml/archive/2007/08/18/1749583.aspx
|
||||||
文章录入:admin 责任编辑:admin | ||||||
【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 |
最新热点 | 最新推荐 | 相关文章 | ||
用java实现web服务器 用java快速开发linux gu… 正则表达式分解siemens交… [portal参考手册]目录 jsp中调用oracle存储过程… |
网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!) |
| 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 网站公告 | 网站地图 | 管理登录 | | |||
|