我通过jsp页面的一个文本域,提交到action里面,所有编码设置的都是UTF-8(jsp页面,配置文件等等),其中包括一个设置编码的filter,跟踪filter确实也执行了下面的语句:encoding为UTF-8
request.setCharacterEncoding(encoding);
response.setCharacterEncoding(encoding);
但是在action里面通过String productName=request.getParameter("name");取到的值还是乱码,
如果productName = new String(productName.getBytes("ISO-8859-1"),"UTF-8");这样的话就不是乱码。请大虾们帮忙看看,怎么能解决这个问题啊。

解决方案 »

  1.   

    用过滤器,在过滤器中设置编码格式就可以了。GBK或者GB2312
      

  2.   

    参考http://blog.flashtc.com/article.asp?id=112
      

  3.   

    我之前项目用的编码方式都是统一UTF-8,是没有问题的,不知道这个为什么不行,起初以为filter没有起作用,但是跟踪代码发现确实设置了编码为UTF-8但是表面看的话就是filter没起作用,不知道有没有人遇到过这样的问题我不想把编码改为GBK或GB2312,能有别的办法吗
      

  4.   

    浏览器里边你看下编码格式默认的是什么,改成UTF-8试试看,我以前也遇见过类似的问题
      

  5.   


    设置成GBK或者GB2312没什么不好呀
      

  6.   

    指定tomcat配置文件server.xml中Connector标签属性URIEncoding="UTF-8"试下
      

  7.   

    form表单的提交方式改成post,就搞定了。
      

  8.   

    关于中文乱码解决办法有几种:
    1.在页面设置编码方式(UTF-8)
    2.编写字符编码过滤器 在过滤器中写下一下代码:
    HttpServletRequest request = (HttpServletRequest)arg0;
    HttpServletResponse response = (HttpServletResponse)arg1;
    //设置字符编码属性
    request.setCharacterEncoding("UTF-8");
    response.setCharacterEncoding("UTF-8");
    response.setContentType("text/html;charset=UTF-8");
    3.在tomcat修改端口的地方 加上这样一句代码:URIEncoding="UTF-8"
    如下所示:  <Connector port="9090" protocol="HTTP/1.1" 
                   connectionTimeout="20000" 
                   redirectPort="8443" 
       URIEncoding="UTF-8"    />
    4.将要发送的数据这样传送:
    URLEncoder.encode("要传送的字符串","UTF-8");
    5.修改浏览器的编码方式
    6.修改自己系统或编辑器的编码方式
      

  9.   

    在Struts2中的过滤器中设置编码方式 全部解决。
      

  10.   

    1、JSP与页面参数之间的乱码  JSP获取页面参数时一般采用系统默认的编码方式,如果页面参数的编码类型和系统默认的编码类型不一致,很可能就会出现乱码。解决这类乱码问题的基本方法是在页面获取参数之前,强制指定request获取参数的编码方式:request.setCharacterEncoding("GBK")或 request.setCharacterEncoding("gb2312")。  如果在JSP将变量输出到页面时出现了乱码,可以通过设置 response.setContentType("text/html;charset=GBK")或 response.setContentType("text/html;charset=gb2312")解决。 
    手动转码String  gb = new String(iso.getBytes("ISO-8859-1"),"GB2312");
      

  11.   

    首先需要修改服务器Tomcat的编码,打开config目录下的server.xml文件,在<Connector>节点处添加URIEncoding="UTF-8";
    然后再写个过滤器,就万事OK了!package com.company.filter;import java.io.IOException;import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    /**
     *  编码过滤器实体类
     * @author Administrator
     *
     */
    public class EncodingFilter implements Filter {
    private FilterConfig config;
    private String encoding="utf-8";
    public void destroy() {
    // TODO Auto-generated method stub } public void doFilter(ServletRequest request, ServletResponse response,
    FilterChain chain) throws IOException, ServletException {
    request.setCharacterEncoding(encoding);//过滤请求的编码
    chain.doFilter(request, response);//继续过滤
    response.setContentType("text/html;charset=utf-8");//过滤响应的编码 } public void init(FilterConfig config) throws ServletException {
    this.config=config;
    String s=config.getInitParameter("encoding");//获取初始化参数数,
    if(s!=null){
    this.encoding=s;
    } }}
    在web.xml中配置:<!--配置字符编码的过滤器-->
    <filter>
    <filter-name>EncodingFilter</filter-name>
    <filter-class>com.company.filter.EncodingFilter</filter-class>
    <init-param>
    <param-name>encoding</param-name>
    <param-value>UTF-8</param-value>
    </init-param>
    </filter>
    <!-- 过滤器映射 -->
    <filter-mapping>
    <filter-name>EncodingFilter</filter-name>
    <url-pattern>/*</url-pattern><!-- 对所有资源过滤 -->
    </filter-mapping>
      

  12.   


     页面本身有中文,一定要在PrintWriter out = resp.getWriter();之前加上     resp.setContenetType(“text.html;charest=gbk”);
     解决get方式乱码---修改server.xml --URIEncoding=”gbk”
     解决post方式提交内容乱码--request.setCharacterEncoding(“gbk”);
     解决mysql乱码: set names gbk;
     <jsp:param name=”user” value=”<%=s%>“ />, url地址包含中文参数 解决办法<%request.setCharacterEncoding(“GBK”); %>
      

  13.   

    你用post提交不就好了嘛,很简单的解决方法
      

  14.   

    建议你使用Struts1过滤器,或者struts2拦截器,转换成gbk 或者gb2312 。。
      

  15.   


    用过滤器吧 .  还有数据库编码也要改? 项目的.settings这个文件夹的文件里面有设置编码的.
      

  16.   

    在js里面传值,应用encodeURIComponent函数对中文编码可解决乱码
      

  17.   

    修改Tomcat中config目录下的server.xml文件,在 <Connector>节点处添加URIEncoding="UTF-8",
    再不行的话就设置过滤器!
      

  18.   

    我也碰到过楼主那样的问题,我用的数据库是SQL server2005,有谁知道这里边不怎么设编码方式么?
      

  19.   

    我所有地方涉及到编码的都设置为了UTF-8,没有用到GET请求,但是就是一个简单的文本域post到action中乱码了
      

  20.   

    用过滤器来处理我也试过,不过也不奏效,所以给楼主另一个方法:
    你写一个类继承org.apache.struts.action.RequestProcessor;
    具体这样:package com.liuwei;import java.io.IOException;import javax.servlet.ServletException;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;import org.apache.struts.action.RequestProcessor;public class MyRequestPro extends RequestProcessor { /* (non-Javadoc)
     * @see org.apache.struts.action.RequestProcessor#process(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
     */
    @Override
    public void process(HttpServletRequest request, HttpServletResponse response)
    throws IOException, ServletException 
    {
    request.setCharacterEncoding("GBK");
    response.setCharacterEncoding("GBK");
    super.process(request, response);
    }}之后在配置文件struts-config.xml中配置如下:
    <controller  processorClass="com.accp.y16.favorite.filter.MyRequestPro" />
    这样就解决中文乱码问题了,不过这只能解决post请求,如果是get请求,只能用new String()构造了!
      

  21.   

    String productName=request.getParameter("name");取到的值还是乱码, 
    如果productName = new String(productName.getBytes("ISO-8859-1"),"UTF-8");这样的话就不是乱码。

    这说明你的过滤器没生效,没完成字符转码嘛!
      

  22.   


    表面看是没奏效,但是我跟踪filter确实设置了编码方式为UTF-8了,见鬼了
      

  23.   


    那你在过滤器中打印一下
    HttpServletRequest req =(HttpServletRequest) ServletRequest;
    String productName=req.getParameter("name");
      

  24.   

    <filter-mapping> 
    <filter-name>EncodingFilter </filter-name> 
    <url-pattern>/* </url-pattern>
    </filter-mapping>
    <filter-mapping> 
    <filter-name>EncodingFilter </filter-name> 
    <url-pattern>*.do</url-pattern>
    </filter-mapping>
    我琢磨着你的映射是"/* "这样配置的,好像是对.do请求不起作用也,我初学时也遇到过这种情况,加上*.do就OK了,LZ试试看!
      

  25.   

    用过滤器,再不行就form表单的提交方式改成post,就OK了
      

  26.   

    乱码,又提升一个高度,你上网去看看,URL的两种方式就知道了,哎,统一了,也有可能出现乱码..
      

  27.   

    post和get提交是有区别的,get提交需要uri编码,你仔细看看百度和Google提交后地址栏是什么东东,好多看不懂的
      

  28.   

    最简单的方法就是把编码方式改成GBK的 
      

  29.   

    我那个去,我也出现了楼主一样的问题啊
    明明过滤器里设置了字符编码,但是在action中取得还是乱码
    楼主怎么解决的啊?
      

  30.   

    4楼的正解,get与post对此应该这么大,是因为get与post的传值方式有着本质区别