1、你JSP的每个页面前有注明
  <%@ page contentType="text/html;charset=gb2312"%>吗?
2、你JSP取数据库时有重新编码字串,如下
 szName = new String(rs.getString("name").getBytes(),"gb2312");
   吗?
3、你JSP的取传入参数时,也有重新编码字串吗?

解决方案 »

  1.   

    1、2、3都满足,问题依旧
    jetplane,你用过 win2000server + sysbase11.9 + jdk1.3 + jconnect5.5 + resin 环境吗?
      

  2.   

    如果1、2、3都满足,问题依旧,极有可能是sybase的字符集问题,查查看。
      

  3.   

    我没有用过jconnect5.5,不过我以前用中文版的jdbc总是出现乱码,后来用英文版的就正常。
      

  4.   

    jconnect5.5的默认编码是“ISO8859-1”,但jdbcOdbc的编码则是与Windows操作系统一致的。所以你可以在2、3这两处重编码时,多设几种试验一下。比如new String(...getBytes("ISO8859-1"),"gb2312")或new String(...getBytes("gb2312"),"gb2312")等等。必能试出一种合适的重新编码方式。
      

  5.   

    各种组合我都试了,不行。今天咨询sybase公司技术人员,让我改数据库的字符集,我把默认850改为iso_1,还是不行,郁闷.................... yanqinzhya312(heaven)兄,你的英文版jdbc是for sybase吗?什么地方可以弄到?
      

  6.   

    szName = new String(rs.getString("name").getBytes("gb2312),
     "ISO8859-1");
    没问题的
      

  7.   

    用这个函数试试:
    <%!
    public String GB2Uni(String GB) {
    //this is a method for servlet loading chinese data from db.
    try {
        if (GB==null)
           {
    return "";
           }
    GB=GB.trim();
    byte[] tmp = GB.getBytes("Cp1252"); //you must change the byte code
    String result = new String(tmp);
    return result;
           } 
    catch(java.io.UnsupportedEncodingException e) 
    {
    System.out.println("CommonFunction.GB2Uni  UnsupportedEncodingException"+e);
    return null;
        }
    }
    %>还有问题我就没辙了!
      

  8.   

    失败,我怀疑是jconnect的问题,但是我只有从sybase当下来的jconnect5.5
      

  9.   

    你可以在逻辑h处理页面中加一个函数过程的。
     public String getStr(String a)
      {
        try{
          String b=a;
          byte[] c=b.getBytes("GBK");
          temp=new String(c,"ISO8859_1");
          return temp;
          }
     catch (Exception e)
    {
    }
     return "null";
    }
     然后在下面的程序中你就可以用这个过程来进行字符转换了。 
      

  10.   

    楼上说来说去就是让人家重新编码,殊不知这样是最烂的一种方法。根据我的经验,问题应该是在jconnect上,因为resin基本已经没有编码问题,问题应该出在数据库存取上。你最好将各个部分独立开来作一些测试。