使用Struts,前台提交给后台的汉字为乱码

2014-11-24 07:48:19 · 作者: · 浏览: 0

首先产生乱码的根本原因为前台JSP页面和后台Action的编码方式不同!

  • Struts的默认编码方式为UTF-8
  • JSP的默认编码方式为GB18030

    解决方案:

    • 前后台编码方式一致;
    • 结合拦截器的使用;
    • 传输方式的指定;

      只用三种方式结合使用才能根本上解决乱码问题。

      1:首先指定前后台编码方式:

      前台:

      <%@page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

      后台Struts.xml配置文件:

      2:指定拦截器

      可以自己编写拦截器也可以使用Spring提供的拦截器(用于SSH整合)。

      使用Spring提供的拦截器需要在web.xml中添加如下配置:

      encodingFilter

      org.springframework.web.filter.CharacterEncodingFilter

      encoding

      UTF-8

      forceEncoding

      true

      encodingFilter

      /*

      encoding:用来指定一个具体的字符集。

      forceEncoding:Spring的早期版本这个参数作用很单一,当request中已经被指定了一个字符集的时候是否再将用endcoding对应的字符集设置到request中去。举个例子来说明,假如说过滤器该字段被配置为false,当请求被提交之后,过滤器会判断request.getCharacterEncoding()是否为null,如果是null那么就会进行request.setCharacterEncoding("UTF-8")的操作,如果不是null那么过滤器什么也不会做。如果被配置成了true,则每次都会进行request.setCharacterEncoding("UTF-8")的操作。

      3:表单指定传输方式:

      使用表单提交参数的时候一定要显示的指定传输的方式,将其指定为post方式。如果不显示指定传输方式默认为get方式,get方式会将参数拼接在URL中,而编码方式为ISO-8859-1。这种情况下(使用get方式)即使你做到了步骤1和步骤2(即统一了前后台编码方式和设置了拦截器)也仍然会出现汉字乱码的问题。除非你在后台使用如下方式对存储汉字的参数做一下处理:

      Stringstr = new String(name.getBytes("ISO-8859-1"),"UTF-8");

      但是如果存储汉字的参数特别多的话,手工进行转换就很麻烦和得不偿失了。

      所以一定要指定表单传输方式为POST!

      综上,乱码的问题就会得以解决。