S2SH整合的框架为什么jsp想action发送的中文内容都是乱码呀!jsp中的encoding=“utf-8”在struts.xml中有<constant name="struts.i18n.encoding" value="utf-8"/>
哪位大侠帮帮忙!!!

解决方案 »

  1.   

    看看你的提交方式get or post?
      

  2.   

    struts2的提交方式不是默认的吗?
      

  3.   

    能改的都改成“utf-8”,request.setEconding()
      

  4.   

    能具体说下request.setEcoding()的位置吗? 谢谢
      

  5.   

    可能是你的jsp页面的编码不是utf-8吧?你把jsp上的pageEncoding的属性值改成utf-8试试.
    一般用Struts2开发时,页面的编码都设置成utf-8
      

  6.   

    在jsp中是<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    在struts.xml中是<constant name="strust.i18n.encoding" value="UTF-8"></constant>就是不行,
      

  7.   

    先全部把所有的改成utf-8
    1、有可能是struts2内部机制获取参数乱码在struts.xml中配置
    <constant name="struts.i18n.encoding" value="UTF-8"/>
    直接写个filter继承StrutsPrepareAndExecuteFilter然后在web.xml配置这个filter
    public class StrutsFilter extends StrutsPrepareAndExecuteFilter {
    public void doFilter(ServletRequest arg0, ServletResponse arg1,
    FilterChain arg2) throws IOException, ServletException {
    arg0.setCharacterEncoding("UTF-8");
    arg1.setContentType("text/html;charset=UTF-8");
    super.doFilter(arg0, arg1, arg2);
    }
    }
    2、或者是你数据库中乱码问题。你设置hibernate的连接后边设置参数让插入数据库的值转换成数据库的格式
    3、有可能是tomcat的问题找到配置文件更改一下
    4、在Action中用 new String(str.getBytes("ISO8859_1"), "UTF8"),进行转码
      

  8.   

    这个问题我前不久也遇到过,所以就给你回了。
    我也试了网上的所有方法,就是不行,也全部用utf-8的编码方式。
    后来找了很久,终于找到原因了,因为我以前做过,没出现过乱码。
    原来是包的问题,以前我下的是struts-2.1.8.1的版本,而我这次是直接用myelcipse直接加入的,是2.0的版本,所以就出现乱码了,而导入2.1.8的版本之后这问题就解决了。
    还有就是你得到的String用
    new String(str.getBytes("ISO8859_1"), "UTF8"),进行转码这种方法也能解决。
      

  9.   

    你用的是struts2的哪个版本。如果是struts2.1.6的话,是Bug,建议使用struts2.1.8.1
      

  10.   

    Struts2的默认编码就是UTF-8,所以在Action里面不用设置它.!  使不使用过滤器都一样,因为最后到了StrutsPrepareAndExecuteFilter全给你整成UTF-8了,除非你在配置文件中设置
    LZ的问题我是深深体会过, 为什么乱呢.?下面我来解释:
    如果你用POST方式提交,只要页面编码是UTF-8,是绝对不会乱的, 因为信息是从请求体过去的!
    如果是get,如果你没有设置过你的服务器的URIEncoding="UTF-8"的话, 默认是会以操作系统相关的GBK来处理,  所以你的参数被GBK编码, 又被Struts2的UTF-8解,这个时候就乱了.!  所以直接去找服务器的配置文件,比如说tomcat的server.xml配置相应的<Connector> 下加个属性URIEncoding="UTF-8"
      

  11.   

    还记得有个URLEncoding和URLDecoding类吗.? 你把你的用GBK编,用UTF-8解,结果就跟LZ的现状是一样的
      

  12.   

    楼主用struts2.1.8应该就没问题了,之前的版本有BUG!
      

  13.   

    2.1.8如果不修改URIEncoding,get请求有中文照样乱.~
      

  14.   

    在web.xml里面添中上这个配置就可以了 <!-- spring 编码过滤 开始 -->
    <filter>
    <filter-name>SetCharacterEncoding</filter-name>
    <filter-class>
    org.springframework.web.filter.CharacterEncodingFilter
    </filter-class>
    <init-param>
    <param-name>encoding</param-name>
    <param-value>UTF-8</param-value>
    </init-param>
    </filter>
    <filter-mapping>
    <filter-name>SetCharacterEncoding</filter-name>
    <url-pattern>*.jsp</url-pattern>
    </filter-mapping>
    <filter-mapping>
    <filter-name>SetCharacterEncoding</filter-name>
    <url-pattern>*.do</url-pattern>
    </filter-mapping>
    <!-- spring 编码过滤 结束 -->
    <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
      

  15.   

    太感谢10楼的哥们了,我也碰到了同样的问题,以前用的2.1.6,换了struts-core-2.1.8.jar包后就没有乱码问题了
      

  16.   

    对编码格式没有确认吧
    这个很恶心
    实在不行,建议直接转成unicode
      

  17.   

    都改成UTF-8
    ,如果还不行,加个过滤器吧,把字符都过滤成utf-8.
    乱码问题,程序员永远的痛--------------
      

  18.   

    在xml.web中配置过滤器,编码设置为utf-8,若还不行就对字符串进行编码转换。
      

  19.   

    1:把的页面的编码统一
    2:检查你的提交方式 最好用Post 用get提交 拦截器是无法解析url上面的乱码的
    这些检查完以后 基本上应该没问题了
      

  20.   

    2.1.6版本的是bug···如果不方便更改Struts2的版本的话,哈有个办法,更改web.xml文件中的
    <filter-class>
       org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
       </filter-class>
    将org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter修改成org.apache.struts2.dispatcher.FilterDispatcher
    因为后者是Struts2 早期版本中的配置,会避免2.1.6中的bug的问题
      

  21.   

    在action中直接使用request.getParameter()时;还是出现乱码。原因分析如下:   1、getParameter()是有带字符参数的。例:String s = (String)request.getParameter("txt").getBytes("iso-8859-1");   2、String也可以带有字符参数。String(byte[] bytes, String charsetName) 
    构造一个新的 String,方法是使用指定的字符集解码指定的字节数组。例:String s = new String("中文","utf-8");
      

  22.   

    除了说以gbk编码,其他都正确,实际上是以iso-8859-1编码,因此可以使用new String("".getBytes("iso-8859-1"), "utf-8")得到正确字符.
    属性URIEncoding="UTF-8"实际上是覆盖tomcat中connector类中的默认编码iso-8859-1。可参考connector查看详细信息
      

  23.   

    用spring的编码过滤器 或自己写个过滤器
      

  24.   

    在struts配置文件中配置个过滤器就行