Servlet处理乱码的总结

来源:互联网 发布:python微服务框架 编辑:程序博客网 时间:2024/05/05 22:02

页面提交数据到servlet中,经常出现中文乱码问题,而且不同的提交方式处理乱码的方式不同。下面总结一下post与get提交数据,servlet处理乱码的解决方案。


 1、post方式解决方案

         request.setCharacterEncoding("utf-8");
     response.setCharacterEncoding( "utf-8" );

2、get方式解决方案
       String string = request。getParamers("");
        String = new String(string.getBytes("ISO8859-1","utf-8"));


  在这里解析一下new String(string.getBytes("ISO8859-1","utf-8"))处理中文乱码,为什么ISO8859-1
  原因在于tomcat默认全部都是用ISO-8859-1编码,不管你页面用什么显示,Tomcat最终还是会替你将所有字符转做ISO-8859-1.那  么,当在另目标页面再用GBK翻译时就会将本来错的编码翻译成GBK的编码,这时的文字会乱码.
所以需要先将得到"字符"(不管是什么)都先用字节数组表示,且使用ISO-8859-1进行翻译,得到一个在ISO-8859-1编码环境下的字节数组.例如:AB表示成[64,65].然后再用GBK编码这个数组,并翻译成一个字符串.


  我们想一想,这样我们不是每获取一个参数都要new String来转码?这样不仅代码量大而且耗内存。有没有好的解决方案呢。。

解决方案就是:修改tomcat的默认编码

修改tomcat的server.xml
          <Connector port="8080" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443"
               URIEncoding="utf-8"
 />
这样配置tomcat之后,当采用get方式提交时,servlet就不用每次获取数据都new String来转码了。
注意:当你配置tomcat后不能再用String = new String(string.getBytes("ISO8859-1","utf-8"));转码了

温馨提示:
 还有一种最好的方式处理中文乱码:过滤器(这里不详细讲)



0 0
原创粉丝点击