这次做项目的时候遇到了一个棘手的问题:我用Ext的时候把中文放在了url里面了,提交上去java服务器端用
request.getParameter("XM")
立马出乱码。我用的服务器是tomcat,采用
new String(request.getParameter("XM").getBytes("iso-8859-1"),"utf-8")
就可以了。这是为什么呢?原因是ext提交的时候将url用utf-8编码了,但是在经过tomcat的时候又被用iso-8859-1给编码了,所以在java的服务器端要先用iso-8859-1将String解析成字节流,无论用什么编码只有字节流是唯一不变,而且可信的,然后将解析出来的字节流,再用utf-8的编码显示出来。 但是这个语句等到放到websphere上的时候又出现了乱码。原因就是url在经过websphere不是被iso-8859-1编码的,这就是websphere跟tomcat的不同点之一。 于是我把语句改成了
new String(request.getParameter("XM").getBytes("gbk"),"utf-8")
中文显示出来了,但是遇到奇数个字的词最后一个中文字总是没掉或者乱码。
于是我又采用了Ext的form,采用post提交,还是乱码。
最后请教了一下有这方面经验的人,都是说把项目utf-8化就好了,这样就可以不用转码,直接用
request.getParameter("XM")
就可以了,无论在tomcat和websphere上都ok了。于是我开始修改项目:
1、先把所有的页面,都用记事本打开
<% request.setCharacterEncoding( "utf-8" ); %>
<% @ page contentType = " text/html;charset=utf-8" %>
并另存为utf-8格式
2、所有用到的js,css,都用记事本打开,并另存为utf-8格式
3、java服务器端的代码凡是输出的response都设置成
response.setContentType("text/html; charset=utf-8");
4、如果有在web.xml里面使用过滤器的话,记得设置成utf-8
5、在调试页面的时候打开httpwatch(这是个很好用的调试工具,监视网页的数据流),观察还有什么地方不是charset="utf-8",改正之
这么一改,乱码消失了,不用转码了,直接获取,放哪里都好了。
总结一下经验:
1、如果有中文的地方不要放在url里面,最好做个form来提交
2、项目采用utf-8统一化