gbk,gbk2312,iso8859-1,utf-8等编码都不行???

解决方案 »

  1.   

    你可以试试post可以吗?没有遇到过,个人感觉通过get的话,经过转码应该不会有问题啊,没有遇到过幫頂
      

  2.   

    如果在JSP页面显示正常的话,在页面间传递才有错,那我们先做个实验来看看是“由于汉字不常用才出错,还是因为转码转错的原因。”,你说用gbk,gb2312来转都不行,如果把字符串“埗,哈哈”传到下一个页面,是三个字都乱码还是只有"埗"乱码呢?
      

  3.   

    用GBK或者utf-8
    如果用post方式在获取参数的前面加一句:
    request.setCharacterEncoding("GBK");
    如果用get方式的话,就要转码才行
      

  4.   

    谢谢各位,首先一个问题是,常用汉字都没问题,问题就是出在不常用汉字上,但jsp页面通过gbk转换后这些字也就没问题了;request.setCharacterEncoding("GBK");方法也试过,也不行,各位如果方便的话,可以拿“埗”拷去本地试一下,这个字一般的输入法是打不出来的,再次感谢各位
      

  5.   

    谢谢terry_yip(搞了几年开发,现在才来恶补基础,请别见笑!) ;常用汉字放在“埗”之前那些常用汉字就没问题,但在之后就会受影响,如“埗哈哈”,就会全部乱码,但“哈哈埗”的话,“哈哈”不会是乱码,但“埗”还会是乱码
      

  6.   

    把<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    也改成gbk1.在传参数之前先把参数进行转码: request.setEnco..("gbk");
    2.在你的Tomcat目录-->conf目录-->server.xml里找出这段:
        <Connector 
    port="8080"               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
                   enableLookups="false" redirectPort="8443" acceptCount="100"
                   debug="0" connectionTimeout="20000" 
                   disableUploadTimeout="true" <!--在里边加上这个参数-->URIEncoding="gbk"
     />
      

  7.   

    写一个自己的MyActionServlet来继承org.apache.struts.action.ActionServlet
    同时只需要 重写 里面的两个方法 
    doGet(HttpServletRequest arg0,HttpServletResponse arg1){
    arg0.setCharacterEncoding("gbk");
    arg1.setCharacterEncoding("gbk");
    return.....
    } 和doPost(HttpServletRequest arg0,HttpServletResponse arg1){
    arg0.setCharacterEncoding("gbk");
    arg1.setCharacterEncoding("gbk");
    return.....
    }如何把项目下的 web.xml里的
    <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
    改成<servlet-class>yourpackagename.MyActionServlet</servlet-class>当然每个jsp页面都应该有<%@ page contentType="text/html; charset=GBK"%>你试试看 应该没问题了!
    :)
      

  8.   

    楼主,我复制你的那"埗哈哈",在Tomcat5.0下面试了,没问题,这是我做的三个页面:
    ------------test.jsp----------------------------<%@ page language="java" contentType="text/html; charset=GBK"
        pageEncoding="GBK"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=GBK">
    <title>Insert title here</title>
    </head>
    <body>
    埗哈哈
    <%
    String s="埗哈哈";
    %>
    <%=s%>
    <A HREF="get.jsp?s=<%=s%>">get方式提交</A>
    <BR><BR>
    <FORM METHOD=POST ACTION="post.jsp" method="post">
    <INPUT TYPE="text" NAME="s" value="<%=s%>">
    <INPUT TYPE="submit" value="post方式提交">
    </FORM>
    </body>
    </html>----------------post.jsp---------------------------
    <%@ page language="java" contentType="text/html; charset=GBK"
        pageEncoding="GBK"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=GBK">
    <title>Insert title here</title>
    </head>
    <body>
    埗哈哈
    <%
    //request.setCharacterEncoding("GBK");
    //out.println("handle by request.setCharacterEncoding:"+request.getParameter("s")+"<BR>");out.println("handle by GBK():"+GBK(request.getParameter("s"))+"<BR>");
    out.println("no handling:"+request.getParameter("s")+"<BR>");
    %><%!
    public static String GBK(String s)
    {
          try
          {
            String des=new String(s.getBytes("iso8859-1"),"GBK");
            return des;
          }
          catch(Exception ex)
      {
            String des="";
            return des;
      }
    }%>
    </body>
    </html>-----------------------------get.jsp--------------------------
    <%@ page language="java" contentType="text/html; charset=GBK"
        pageEncoding="GBK"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=GBK">
    <title>Insert title here</title>
    </head>
    <body>
    埗哈哈
    <%
    //request.setCharacterEncoding("GBK");
    //out.println("handle by request.setCharacterEncoding:"+request.getParameter("s")+"<BR>");out.println("handle by GBK():"+GBK(request.getParameter("s"))+"<BR>");
    out.println("no handling:"+request.getParameter("s")+"<BR>");
    %>
    <%!
    public static String GBK(String s)
    {
          try
          {
            String des=new String(s.getBytes("iso8859-1"),"GBK");
            return des;
          }
          catch(Exception ex)
      {
            String des="";
            return des;
      }
    }%>
    </body>
    </html>注意,你要看看你的jsp保存时,是保存为什么格式的,用默认的就不会有问题了,很多人都不知道JSP的保存格式不对会造成乱码的。
      

  9.   

    中文乱码问题原理及解决方案
    1.中文乱码原理
    contentType -- 指定的是JSP页最终Browser(客戶端)所見到的网页內容的编码。
    就是 Mozilla的 Character encoding, 或者是 IE6的 encoding. 例如 JSPtw Forum 用的contentType就是 Big5. pageEncoding -- 指定JSP编写时所用的编码
    如果你的是 WIN98, 或 ME 的NOTEPAD记事本JSP, 就一定是常用的是Big5 或 gb2312, 如果是用 WIN2k winXP的NOTEPAD時, SAVE时就可以选择不同的编码, 包括 ANSI(BIG5/GB2312)或 UTF-8 或 UNIONCODE(估是 UCS 16). 因为JSP要经过两次的"编码", 第一阶段会用 pageEncoding, 第二阶段会用 utf-8 至utf-8, 第三阶段就是由TOMCAT出來的网页, 用的是contentType. 阶段一是 JSPC的 JSP至JAVA(.java)原码的"翻译", 它会根据pageEncoding 的设定读取JSP. 结果是 由指定的 pageEncoding(utf-8,Big5,gb2312)的JSP 翻译成统一的utf-8 JAVA原码(.java). 如果pageEncoding设定错了, 或沒设定(预设ISO8859-1), 出来的 在这个阶段就已是中文乱码. 阶段二是由 JAVAC的JAVA原码至JAVA BYTECODE的编译. 不论JSP的编写时是用(utf-8,Big5,gb2312),经过阶段一的结果全都是utf-8的ENCODING的JAVA原码. 
    JAVAC用 utf-8的ENCODING读取AVA原码, 编译成字串是 utf-8 ENCODING的二进制码(.class). 這这是 JAVA VIRTUAL MACNHINE 对常数字串在 二进制码(JAVA BYTECODE)內表单的规范. 阶段三是TOMCAT(或其的application container)载入和执行 階段二得来的JAVA二进制码, 输出的结果( 也就是BROWSER(客戶端)) 見到的. 这时一早隐藏在階段一和二的参数contentType, 就发挥了功效.由上可知,
    1.如果在jsp页面里有中文,则在显示时不出现乱码,就要设置contentType为gbk,big5,gb2312或utf-8。
    2.在日文系统下,jsp页面里有中文,则不仅要设置contentType,还得设置pageEncoding为gbk,big5,gb2312,否则可能出现乱码。2.中文请求乱码原理
    默认情况下,浏览器使用utf-8发送请求,服务器(tomcat/webshere/weblogical等)接收请求默认使用的是utf-8。这时如果在java程序里处理中文就可能出现乱码。
    解决方案:request.setCharacterEncoding("gb2312");转换字符集后处理。
    3.struts中的中文问题
    Struts中,浏览器发送请求后, 在action里取值时,无论怎么转码都是乱码,不管用form.get,还是request.get方法。
    这是由于,form中的字段已经由struts将请求中的数据组装到form里了,此时已经为乱码,使用的字符集为服务器默认的字符集,所以在action里取值时,无论怎么转码都是乱码,不管用form.get,还是request.get方法
    解决方案:做一个过滤器,在请求到来时,让过滤器过滤请求编码字符集。
    public void doFilter(ServletRequest srequest, ServletResponse sresponse,
    FilterChain chain) throws IOException, ServletException
    {
    srequest.setCharacterEncoding(“gb2312”);
    chain.doFilter(srequest,sresponse);
    }
      

  10.   

    谢谢各位的解答,但大家可能没有理解问题所在:现在问题是这样的,我用的是struts结构,在两个jsp页面之间都没问题,这个字也不会是乱码,但一到action不管是用 request.getParameter()方法还是form.get方法取出来的都是乱码,而且不管怎么转码都是一样,所以,jsp页面上的方法都不需要试了,jsp与action之间还有没有什么方法进行转码的
      

  11.   

    把字符串这样处理一下以后再取就没有问题了
    String str = request.getParameter("userName");
    byte B[] = str.getBytes("ISO-8859-1");
    str = new String(B);
      

  12.   

    你是用Tomcat发布的工程吗?
    解决方法:
    1.写一个过滤器,过滤所有页面,Action或Servlet request.setCharacterEncoding("GBK");
    response.setCharacterEncoding("GBK");2.用记事本打开Tomcat\conf\server.xml
    找到<Connector 
    port="8080"               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
                   enableLookups="false" redirectPort="8443" acceptCount="100"
                   debug="0" connectionTimeout="20000" 
                   disableUploadTimeout="true" <font color=red>useBodyEncodingForURL="true"</font>/>
    红色是要添加的。