这是个很常见的问题.楼主搜索下就可以了^_^.
http://blog.donews.com/qiyadeng/archive/2005/07/12/463736.aspx

解决方案 »

  1.   

    要是比较容易解决我也不用烦了几天.你看我发出的代码,基本上普通的解决方法已经用上了,就是不奏效.
    把gb2312换成gbk也是一样不行.
    哪位朋友还有其他建议吗?
      

  2.   

    用GBK试试
    -----------------
    试过了,还是不行~~!!
      

  3.   

    request.setCharacterEncoding("gb2312"); 与
    new String(temp.getBytes("ISO8859-1"),"GB2312");
    用一个就可以了.不用两个联用.
      

  4.   

    试试以下方法:
    1) 打开tomcat的server.xml文件,找到区块,加入如下一行: 
    URIEncoding="GBK" 
    完整的应如下: 
    <Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" debug="0" connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="GBK"/> 2)重启tomcat。
      

  5.   

    试试以下方法:
    1) 打开tomcat的server.xml文件,找到区块,加入如下一行: 
    URIEncoding="GBK" 
    完整的应如下: 
    <Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" debug="0" connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="GBK"/> 2)重启tomcat。
    ---------------------------------
    试了,还是不行~~!!
    我在想,会不会是浏览器的问题~~?
      

  6.   

    java.net.URLEncoder.encode("中文","gbk")
      

  7.   

    <c:out value="${param.errmsg}"/>直接输出传递过来的errmsg值了,所以你的errmsg = new String(temp.getBytes("ISO8859-1"),"GB2312")这句根本不起作用,好好看看JSTL吧。
    另外编码问题和你所用的服务器有关,比如同一个应用程序在resin下没问题,移植到tomcat下就可能出现问题,反之亦然。
      

  8.   

    <c:out value="${param.errmsg}"/>直接输出传递过来的errmsg值了,所以你的errmsg = new String(temp.getBytes("ISO8859-1"),"GB2312")这句根本不起作用,好好看看JSTL吧。
    另外编码问题和你所用的服务器有关,比如同一个应用程序在resin下没问题,移植到tomcat下就可能出现问题,反之亦然。
    ------------------------------------------------------------------------------------
    <c:out value="${param.errmsg}"/>
    这句话不起作用一点错都没有,因为这是刚开始时我写的.
    但现在问题是连out.println(errmsg);这句"起作用"的也不行啊.我用的是tomcat的服务器.
      

  9.   

    关于解决jsp中文乱码:  1)首先更改tomcat的配置文件server.xml,在8080和8009两个服务器侦听端口的<Connector/>标签的末尾加上URIEncoding="GBK",这个也是URL路径编码,这是为了解决HTTP服务器中POST方法和GET方法中参数的中文乱码问题。
     
        2)其次,服务器端也应对Request和Response方法进行相应的码型转换,这个在tomcat中实现十分简单,因为随着tomcat4的发行,有一个叫SetCharacterEncodingFilter的过滤器也出现了,只要将其添加到你的WEB应用程序的classes或者lib目录下即可,然后就是设置你的应用程序的配置文件web.xml了:
     
    <web-app>
    …………
     
       <filter>
            <filter-name>Set Character Encoding</filter-name>
            <filter-class>filters.SetCharacterEncodingFilter</filter-class>
            <init-param>
                <param-name>encoding</param-name>
                <param-value>GBK</param-value>
            </init-param>
        </filter>
     
    …………
     
        <filter-mapping>
            <filter-name>Set Character Encoding</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
     
    …………
    </web-app>
     
     
        4)服务器端的问题解决了,最后需要解决的就是网页自身的问题了,jsp网页中需要加入如下一行:
     
    <%@ page contentType="text/html;charset=GBK"%>         5)呵呵,补充一点,这里尽管写得是GBK编码,不过个人还是强烈建议用UTF-8编码。
      

  10.   

    request.setCharacterEncoding("gb2312"); 与
    new String(temp.getBytes("ISO8859-1"),"GB2312");
    我觉的这个方法挺好的,我以前也是碰到你这种情况,就是用这种方法解决的。
    不知你试了没有
      

  11.   

    我用了,你看我代码里都有这两句了:request.setCharacterEncoding("gb2312"); 与
    new String(temp.getBytes("ISO8859-1"),"GB2312");还有,照着 yophoo(雅风)的方法做还是不行~~!
    哎~~!!我都快郁闷死了~~~~!!!!!
      

  12.   

    把<%@ page contentType="text/html;charset=gb2312" language="java" %>
    和request.setCharacterEncoding("gb2312");
    换成
    <%@ page 
    language="java"
    contentType="text/html; charset=GB18030"
    pageEncoding="GB2312"
    %>
    试试。
      

  13.   

    是啊,郁闷死了啊~~!!
    对了,我的代码中的errmsg这个中文变量参数是用<jsp:forward>中传递过来的,不是post传递,不知道这个有没有关系?
      

  14.   

    我以前也遇到过像楼主的这种情况,不过我的在win平台上可以正常显示,换到solaris就不行了后来是取了整个页面的流,在分解!谁有好办法?
      

  15.   

    把<%@ page contentType="text/html;charset=gb2312" language="java" %>
    和request.setCharacterEncoding("gb2312");
    换成
    <%@ page 
    language="java"
    contentType="text/html; charset=GB18030"
    pageEncoding="GB2312"
    %>
    试试。
    ------------------------------------------------
    不行!!!
    是不是这个可能不是代码的问题,会不会是别的问题呢?
      

  16.   

    window xp sp1 + Tomcat
      

  17.   

    既然是Tomcat服务器,你在论坛上搜一下中文显示,,会有很多配置filter的!
      

  18.   

    要不你在中间的Action类中加入这个试试
    response.setContentType("text/html; charset=GBK");
    然后其他全部改成“GBK”的。
      

  19.   

    是不是XP的问题??
    有时候有些东西在XP不能正常运行!建议还是不要用XP做系统平台开发,
    还是用2000吧!
      

  20.   

    不知楼主的问题解决了没,
    我给你两个方案,你试一下:
    1。去掉request.setCharacterEncoding("gb2312");
    2。new String(temp.getBytes("ISO8859-1"));
    呵呵,不要问我,为什么,内码转换问题本身就很复杂,如果给你解释的话会写一大堆的文字,建议你去网上找找这方面的文章看看。不又句话很受用:看你的代码应该是表单传递,并且使用gb2312,所以就在iso8859-1 和gb2312之间转换就好,两边都转一下,总会有成功的。不过我也同意楼上上****的意见,使用utf8
      

  21.   

    java.net.URLEncoder.encode("中文","gbk")
      

  22.   

    还没搞好啊,晕啊,n天了哦~~!!
    从表单读取的中文可以用new String(temp.getBytes("ISO8859-1"));搞定.但是,从   <jsp:forward page="error/addproductserror.jsp">
            <jsp:param name="errmsg" value="商品为空或已经存在."/>
        </jsp:forward>
    传递过来的参数errmsg就解决不了了~~!!
      

  23.   

    String errmsg = new String(temp.getBytes("ISO-8859-1"),"gb2312")
      

  24.   

    public void getErrmsg(HttpServletRequest request) throws IOException {
        ServletInputStream in = request.getInputStream();
        byte[] line = new byte[8192];
        int i = 0;
        String newLine = "";
        while ( (i = in.readLine(line, 0, line.length)) != -1) {
          newLine = new String(line, 0, i);
          System.out.println(newLine);
          if (newLine.indexOf("form-data; name=\"errmsg\"") != -1) { //根据自己页面信息来判断要取的字段值
            System.out.println("找到所要取得的表单值");      }
        }
      }你运行以后,看后天打印的newLine结果。我想你就应该知道具体怎么写了。。虽然方法太苯了,但是可以解决你的问题。如果你实在解决不了的话,在用这个试试吧
      

  25.   

    首先我要说明的是:从表单传递过来的中文变量参数可以正常转换成"gb2312"格式,显示也正常~!
    但是,如果我用forward传递过来的中文参数不管用什么方法转化都显示成?号。
    <jsp:forward page="error/addproductserror.jsp">
      <jsp:param name="errmsg" value="商品为空或已经存在."/>
     </jsp:forward>
    这个正是问题的关键~~!!请高手指点
      

  26.   

    <jsp:forward page="error/addproductserror.jsp?errmsg==商品为空或已经存在.">这样你试过了吗?
      

  27.   

    wxhymy()说得好~!!用这个方法确实管用,问题解决了~!
    但我现在又有一个问题:
    为什么用<jsp:forward page="error/addproductserror.jsp?errmsg==商品为空或已经存在.">没有乱码.用<jsp:forward page="error/addproductserror.jsp">
          <jsp:param name="errmsg" value="商品为空或已经存在."/>
       </jsp:forward>
    就出现乱码????
      

  28.   

    实在不行,可以传值值钱,把汉字转成unicode码
                    String value = null;
          String src="商品为空或已经存在."/";
          char [] bytes=new char[src.length()]
          src.getChars(0,src.length(),bytes,0);
          for(int i=0;i<bytes.length;i++){
            value + = (int)bytes[i]+";";
          }把value传过去,然后再返成汉字