我在jsp的页面中有一个<input type="text" name="name" id="name"/>  然后post方式提交到action,在action中String name接收,但name却是乱码,如何解决?环境:tomcat6+jdk1.6+myeclipse6.5+struts2 我已试过如下方法:
1、在jsp页面中加<%@ page language="java" contentType="text/html; charset=UTF-8"  pageEncoding="UTF-8"%>  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
2、把java改成utf-8

解决方案 »

  1.   

    String str= new String((req.getParameter("XXX")).getBytes("ISO-8859-1"),"UTF-8")这样试下    UTF-8可以换成你要的
      

  2.   

    网上有很多方法的 搜一下 试试被 先改一下tomcat的server.xml试试吧
      

  3.   

    request.setCharacterEncoding("utf-8");
      

  4.   

    我想问下你那个name是中文么。
      

  5.   

    struts2中的拦截器,处理一下,网上有源码!
      

  6.   

    GB2312 试了,也不行,GBK UTF8都试过了。
      

  7.   

    乱码一般不都这样吗?
    做个过滤器。。统一utf-8
    js提交的话重新编码一下
    一般不会出现乱码了
      

  8.   

    可以试试用jstl的<c:url>标签来传中文
      

  9.   

    写个过滤,request.setCharacterEncoding("utf-8");过滤下就行了。
      

  10.   

    过滤,用filter还是struts?在网看了一下说struts2.0用filter不管用。
      

  11.   

    一看数据库 不是 UTF-8 哈哈
      

  12.   

    对不起  没看清楚题目  action乱码  
      

  13.   

    原网页已由百度转码以便在移动设备上查看 用户名: 密码:您当前的位置:飞诺网>> java>> Java技术文档 Struts2拦截器解决乱码问题www.diybl.com    时间 : 2010-07-19  作者:网络   编辑:huyang629 点击:   [ 评论 ]  之前使用struts1的时候是通过写filter来处理乱码,把写的filter搬到struts2,配置了WEB.XML发生没有效果,请求根本就没有通过filter。原因Struts2在web.html配置了处理action请求的filter:<filter>
      <filter-name>struts2</filter-name>
      <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
     </filter> <filter-mapping>
      <filter-name>struts2</filter-name>
      <url-pattern>/*</url-pattern>
     </filter-mapping>通过这个sturts filter后,在这个struts filter之前或之后配置都是发现处理乱码的filter不起作用,所以编写拦截器还是个不错的解决乱码的方式。1、编写自定义 EncodingIntereptor拦截器import java.io.UnsupportedEncodingException;
    import java.util.Iterator;import javax.servlet.http.HttpServletRequest;import org.apache.struts2.StrutsStatics;import com.opensymphony.xwork2.ActionContext;
    import com.opensymphony.xwork2.ActionInvocation;
    import com.opensymphony.xwork2.interceptor.AbstractInterceptor;public class EncodingInterceptor extends AbstractInterceptor { /**
      * Struts2编码拦截器
      */
     @Override
     public String intercept(ActionInvocation arg0) throws Exception {
      // TODO Auto-generated method stub
       ActionContext actionContext = arg0.getInvocationContext();   
       HttpServletRequest request= (HttpServletRequest) actionContext.get(StrutsStatics.HTTP_REQUEST); 
      System.out.println("Encoding Intercept...");
      /**
       * 此方法体对GET 和 POST方法均可
       */
      if( request.getMethod().compareToIgnoreCase("post")>=0){
          try {
           request.setCharacterEncoding("GBK");
          } catch (UnsupportedEncodingException e) {
           // TODO Auto-generated catch block
           e.printStackTrace();
          }
         }else{
          Iterator iter=request.getParameterMap().values().iterator();
          while(iter.hasNext())
          {
           String[] parames=(String[])iter.next();
           for (int i = 0; i < parames.length; i++) {
            try {
             parames[i]=new String(parames[i].getBytes("iso8859-1"),"GBK");//此处GBK与页面编码一样
            } catch (UnsupportedEncodingException e) {
             e.printStackTrace();
            }
           }   
          }   
           }
             return arg0.invoke();
     }}
    2、Struts.xml配置<package>下注册拦截器:     <interceptors>
            <interceptor name="Encoding" class="com.disaster.util.EncodingInterceptor"></interceptor>
            <interceptor-stack name="Encode">
               <interceptor-ref name="Encoding"></interceptor-ref>
               <interceptor-ref name="defaultStack"></interceptor-ref><!-- 必须引入这个,否则request不会再往下传-->
            </interceptor-stack>
         </interceptors>3、使用拦截器,可将其设为默认的拦截器
         <default-interceptor-ref name="Encode"></default-interceptor-ref>   4、页面编码和页面字符编码跟设为"UTF-8"。如果页面是其它编码,将拦截器中重编码部分改一下即可。
    如果图片或页面不能正常显示请点击这里 在网上找了这了一个,设了utf-8,但还是乱码,没解决!!!
      

  14.   

    我在 if( request.getMethod().compareToIgnoreCase("post")>=0){位置打了断点,好像没起作用!!
      

  15.   

    在跳转页面 在获取第一个参数前加上
    request.setCharacterEncoding("GBK");
      

  16.   

    在web.xml中设置
    <filter>
    <filter-name>CharacterEncodingFilter</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>
    <init-param>
    <param-name>forceEncoding</param-name>
    <param-value>true</param-value>
    </init-param>
    </filter>服务器中server.xml中 设置   URIEncoding="UTF-8"  试试
      

  17.   

    配置上去后,tomcat 启动失败严重: Exception starting filter CharacterEncodingFilter
    java.lang.ClassNotFoundException: org.springframework.web.filter.CharacterEncodingFilter
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1680)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526)
    at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:269)
    at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:422)
    at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:115)
    at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4072)
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4726)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:799)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:779)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:601)
    at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1079)
    at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:1002)
    at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:506)
    at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1317)
    at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:324)
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:142)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1065)
    at org.apache.catalina.core.StandardHost.start(StandardHost.java:840)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1057)
    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463)
    at org.apache.catalina.core.StandardService.start(StandardService.java:525)
    at org.apache.catalina.core.StandardServer.start(StandardServer.java:754)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:595)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
      

  18.   

    另外,我在拦截器中,用gbk,utf-8都不行。但使用String str= new String((req.getParameter("XXX")).getBytes("ISO-8859-1"),"UTF-8")是可以的。
      

  19.   

    public class EncodingFilter implements Filter
    { public void destroy()
    {
    }

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException
    {
    request.setCharacterEncoding("UTF-8");
    chain.doFilter(request,response);
    } public void init(FilterConfig arg0) throws ServletException
    {
    }}
      

  20.   

    <filter>
            <filter-name>encoding</filter-name>
            <filter-class>
                com.shfft.filter.EncodingFilter
            </filter-class>
        </filter>
    web.xml
      

  21.   

    配置一个过滤器,然后把所有开发工具的编码都统一成一种,比如utf-8
      

  22.   

    场合:页面本身有中文的时候
    解决办法:servlet:resp.setContentType("text/html;charset=gbk");
    Jsp: <%@ page contentType="text/html;charset=gb2312"%>
    注意:一定要写在PrintWriter out = resp.getWriter();之前场合:解决get方式乱码问题:
    解决办法:修改server.xml URIEncoding="GBK"场合:解决post方式提交内容的乱码
    解决办法:request.setCharacterEncoding("GBK");
    注意:一定要写在存取第一个参数之前
    不要调用response.setCharacterEncoding("GBK");
    场合:<jsp:param name="user" value="<%=s%>"/>,url地址包含中文参数
    解决办法:<%request.setCharacterEncoding("GBK");%>
      

  23.   

    1.在配置文件中设置编码方式为‘utf-8’
    2.在jsp页面设置编码方式为‘utf-8’
      

  24.   

    使用struts的拦截器,打了断点后,是跳到拦截器里了,jsp是使用post方法的,request.setCharacterEncoding("utf-8");  ,也是不起作用的。
    只有.getBytes("ISO-8859-1"),"utf-8")这个起作用!!