解决问题的具体思路、方法
  Java采用Unicode码编码方式,中英文字符均采用16bit存储。既然存储英文信息是正确的,根据一定规则,将中文信息转换成英文信息后存储,自然不会出现截尾现象。读取信息时再进行逆向操作,将英文信息还原成中文信息即可。由GB2312编码规则可知,汉字一般为二个高位为1的ASCII码,在转换时将一个汉字的二个高位1去掉,还原时再将二个高位1加上。为了处理含有英文字符的中文字串,对英文字符则需要加上一个Byte 0标记。
  以下提供的两个公用静态方法,可加入任何一个类中使用。
  将中英文字串转换成纯英文字串
  public static String toTureAsciiStr(String str){
  StringBuffer sb = new StringBuffer();
  byte[] bt = str.getBytes();
  for(int i =0 ;i〈bt.length;i++){
  if(bt[i]〈0){
  //是汉字去高位1
  sb.append((char)(bt[i]&&0x7f));
   }else{//是英文字符 补0作记录
  sb.append((char)0);
  sb.append((char)bt[i]);
   }
   }
  return sb.toString();
  }  将经转换的字串还原
  public static String unToTrueAsciiStr(String str){
   byte[] bt = str.getBytes();
   int i,l=0,length = bt.length,j=0;
   for(i = 0;i〈length;i++){
   if(bt[i] == 0){
   l++;
   }
   }
   byte []bt2 = new byte[length-l];
   for(i =0 ;i〈length;i++){
   if(bt[i] == 0){
   i++;
   bt2[j] = bt[i];
   }
   else{
   bt2[j] = (byte)(bt[i]|0x80);
   }
   j++;
   }
  String tt = new String(bt2);
  return tt;
  }  上例在实际编程中效果很好,只是存储的中文信息需要经过同样处理,才能被其他系统使用。而且如果中文字串出现英文字符,实际上增加了额外的存储空间。

解决方案 »

  1.   

    我前几天也碰到了难搞的中文乱码,我借用了wjmmml的一个程序,在输入数据库时直接调用这个函数,这个程序我贴出来给你参考一下吧,顺便借个地方谢谢wjmmml。<%!
    public static String UnicodeToChinese(String s){
      try{
        if(s==null||s.equals("")) return "";
        String newstring=null;
         newstring=new String(s.getBytes("ISO8859_1"),"gb2312");
        return newstring;
     }
    catch(Exception e)
     {
      return s;
     }
     }
    %>
      

  2.   

    呵呵
    to:: Smilings(小不点) 客气了不是!呵呵,没什么的。在置顶的文章里,有我总结的一篇,你好好看看吧,对有帮助的,其中很详细的。