最近使用session跨页面传值,可是当我这样用的时候session.setAttribute("nickname",nkname),注:nkname是汉字。然后跳转到另外一个页面取它出来的时候,就是session.getAttribute("nkname").toString(),它就会乱码成为一个个???。试过了csdn里面好多办法都不行的情况下,用了这样一个方法:Strng   getFromSession=new   String((String)session.getAttribute( "sessionName ").getBytes( "GBK "), "ISO-8859-1 ");   所以我怀疑,session中的编码方式是不是ISO-8859-1?还是其他的?  还请各位朋友不吝赐教哦,恕我愚钝哈........

解决方案 »

  1.   

    实在不行建议写个过滤器
    package com.filter;import java.io.IOException;import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;public class Filter implements javax.servlet.Filter { public void destroy() {
    // TODO Auto-generated method stub

    } public void doFilter(ServletRequest request, ServletResponse response,
    FilterChain chain) throws IOException, ServletException {
           HttpServletRequest newRequest=(HttpServletRequest)request;
            String pathString=newRequest.getRequestURI();   //获取路径
           
           
            if (pathString.lastIndexOf(".")>0) {
            String path=pathString.substring(pathString.lastIndexOf("."),pathString.length());
               
                if (path.equals(".css")||path.equals(".js")) {    //判断是否是js或css文件
                    chain.doFilter(request, response);
             }
                else {
                request.setCharacterEncoding("gbk");
                 response.setCharacterEncoding("gbk");
                 chain.doFilter(request, response);
         }
    }
            else {
            request.setCharacterEncoding("gbk");
             response.setCharacterEncoding("gbk");
             chain.doFilter(request, response);
    }
           
    } public void init(FilterConfig arg0) throws ServletException {
    // TODO Auto-generated method stub

    }}
    配置webxml.txt
     <filter>
    <filter-name>filter</filter-name>
    <filter-class>com.filter.Filter</filter-class>
    </filter>
    <filter-mapping>
    <filter-name>filter</filter-name>
    <url-pattern>/*</url-pattern>
    </filter-mapping>
      

  2.   

    我觉得应该是setAttribute的时候nkname已经是乱码了吧,因为再getAttribute应该不存在编码问题的。
      

  3.   

    我可以确定,存进去的时候是正确的,的确是中文。因为,我试着存进去之后,在不跳转的情况下,本页又取出来,结果是正确的。问题就存在于跨页面取就出现问题。用我题目描述的方法可以解决,所以我很好奇的问了下,session的编码方式。
      

  4.   

    老问题,如果你用的是tomcat,设置一下配置文件,如果用的别的容器,请举一反三。
    server.xml文件
     <Connector port="80" protocol="HTTP/1.1" 
                   connectionTimeout="20000" 
                   redirectPort="8443" 
                   URIEncoding="UTF-8" />
        <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8"/>
    注意红色字体部分,编码根据你自己情况更改一下,比如GBK....
      

  5.   

    晕上面的代码不能加样式
     <Connector port="80" protocol="HTTP/1.1" 
                   connectionTimeout="20000" 
                   redirectPort="8443" 
                   URIEncoding="UTF-8" />
        <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8"/>
      

  6.   

    我觉得应该是你另外地方setAttribute的,Session就是内存持有的对象而已,已经不会再做编码转换的你可以写一个HttpSessionAttributeListener看看是什么地方放进去了。
      

  7.   


    你用的那个Strng getFromSession=new String((String)session.getAttribute( "sessionName ").getBytes( "GBK "), "ISO-8859-1 ");  方法的原理是在网页转发时,session会把你原来页面的格式转化成字节码,你这个方法是把你转化成字节码格式的字符再从新编译成ISO的形式显示