我用的是SQLSERVER2000的数据库,我将数据库的内容读出后,在cmd中显示是“????”,于是,我找到一个方法,如下
public synchronized static String fromDatabase(String change) throws
      UnsupportedEncodingException {
    return new String(change.getBytes("iso-8859-1"), "gb2312");
  }
于是,我又
private Chinese toChinese = new Chinese();
toChinese.fromDatabase(Content) //Content为我从数据库中读取的内容
在cmd中还是显示“????”
然后我试着将fromDatabase方法改成(change.getBytes("utf-8"), "utf-8"),就可以正常显示了,可是我不明白为什么?
按照我的理解(change.getBytes("iso-8859-1"), "gb2312")这样写是取得change的iso-8859-1的编码,将其转换成gb2312的;而(change.getBytes("utf-8"), "utf-8")这样写就是取得change的utf-8的编码,将其转换为utf-8的,这不是多此一举吗?
也许是我把这个方法理解错了,请各位解释一下,谢谢。

解决方案 »

  1.   

    有此字符是gb2312里面没有的。你用gb2312读出来还是乱码的。
    public String toGb(String uniStr){
           String gbStr = "";
           if(uniStr == null){
           uniStr = "";
           }
           try{
           byte[] tempByte = uniStr.getBytes("ISO8859_1");
           gbStr = new String(tempByte,"GB2312");
           }
           catch(Exception ex){
           }
           return gbStr;
           }  public String toUni(String gbStr){
        String uniStr = "";
      if(gbStr == null){
      gbStr = "";
      }
      try{
      byte[] tempByte = gbStr.getBytes("GB2312");
      uniStr = new String(tempByte,"ISO8859_1");
      }catch(Exception ex){
      }
      return uniStr;
      }
    这是我写的编码的。一个是读取出来。一个是写入数据库。在resin里面。我这个东西全部是没有用的,写上后反而是乱码。但我在weblogic与tomcat里面用了很久都是非常正确的。
      

  2.   

    刚刚试过,还是显示“????”
    我刚查了一些资料,说数据库中的内容编码都是ISO8859_1的,可为什么我用ISO8859_1转换成GB2312不行,而用UTF-8转换成UTF-8就可以了呢。
      

  3.   

    数据库中的编码不一定都是“ISO8859_1”,一般都是在数据库安装阶段选择的,如果不手工选择,用数据库自己缺省的编码,有的可能会用系统的默认编码。
      

  4.   

    可如果我的数据库的编码是utf-8的,那个方法也应该是change.getBytes("utf-8"), "gb2312");,可为什么写成这样change.getBytes("utf-8"), "utf-8");才正确呢?
      

  5.   

    哦,写成这样change.getBytes("utf-8"), "gb2312");是“楠????锟斤拷锟斤拷锟芥径??????娴?璁筹拷锟芥??锟芥”这样的乱码