java中文乱码
作为一个java程序员,你一定都经受过java中文乱码的摧残,尤其是Jsp中文显示,相信是每个初做J2EE人的必过的坎。更要命的是,代码上明明觉得都没有什么问题,可显示出来就是乱码,更有甚者,调试的时候好好的,当你兴冲冲的部署到服务器上时,乱码了,你也就傻眼了,贼郁闷。ps:还有一个问题,我一直都没想明白,为什么java设计者要把java流设计的如此复杂,每一次在做流的处理时,我都要查jdk文档,要不然云里雾里的。
最近手头上一个项目,其中牵扯了很多的编码的问题,整个流程从网页源码的抓取,document对象转化,xml生成,到字节流抽取,页面显示,其中还伴随着输入输出流的交换。更要命的是,这个项目三个模块是由不同人完成了。所以跑下一个流程,五花八门,屏幕一堆火星文。
好吧,我只好拿出一天的时间来读每个人的代码,然后解决这个问题。还好,项目不是很大,类不是很多,函数也不是很复杂,折腾到下午问题总算解决。一个字,累。我没有什么好办法,只能用一个接口,把所有抓取到的页面源码统一成utf-8格式,然后其他模块中每一个牵扯到字符流,编码的地方,我都加上utf-8硬编码。很累,不过还是有点收获,在这里总结下:
1、整个项目编码格式要统一。
大家不要笑,这是一个老生常谈的东西,但是我敢打包票,一个团队做出来的项目总会在某个地方出问题。比如要用UTF-8编码,那你每一个文件都要加上UTF-8编码,包括java类,xml文件,jsp,html页面等等,总之所有的文件,最好借助于IDE工具进行统一编码。其中还要注意一点,如果用UTF-8编码,那么每一处都要用大写,而不要有的地方,用utf-8,有的用UTF-8。因为残酷的经验告诉我们,这在一个页面包含另一个页面时,会出问题的。
2、禁忌toString(),getBytes(),new String().
通常遇到字符乱码时,每个人都会说,我这里是好好的,不信你看。但是,请你相信,也许问题就出在你认为对的地方。项目是一个整体,如果你不遵守项目组制定的规范,那么在你的模块里再好也是徒劳无益的。所以在使用toString(),getBytes(),new String()这些函数时,请一定设定它们的编码格式,比如getBytes(”UTF-8″),toString(”UTF-8″),如果缺省,系统会采用java默认的编码格式,这往往就为你的团队埋下了苦果。
3、请你相信htmlStr=new String(htmlStr.getBytes(”utf-8″),”utf-8″);
真的,有时候你得到的字符串明明是utf-8的,但是打印出来就是乱码,好吧我不知道这是为什么,但你可以试一下htmlStr=new String(htmlStr.getBytes(”UTF-8″),”UTF-8″);也许问题就会解决。
总之,解决java中文乱码是一个细活,规范的开发手册+良好的编程习惯+细心也许会让你不至于有些时候手忙脚乱。


















