取出的字符串中含有问号说明这是个乱码,它可能是任何字符,不一定就是问号。
如果你一定要str2=是cc谁,那就把str3 = str1.substring(3,8);改成
str3 = str1.substring(3,9);吧,不过是在不明白你这段代码有什么意义?

解决方案 »

  1.   

    str.getBytes("gb2312")的时候能取得正确的字符集。但是new String(str,"8859_1")的时候str里面有8859_1以外的字符,所以就产生了?。
    下面str2事实上就是?
      

  2.   

    我的意思就是汉字用“8859_1”编码的时候,假如用substring()取到了汉字的第一个unicode码,那么程序就自动的把这个汉字的第二个unicode码取出,当转化成“gb2312”的时候不会出现乱码。但是如何判断一个字符是汉字的第一个unicode编码可就比较困难,如何判断呢?
      

  3.   

    试试
    temp=str1.substring(3,8);
    然后判断
    temp.substring(temp.length()-1,temp.length());的字符编码是否为汉字
      

  4.   

    参考以下函数function fucPWDchk(str)
    {
      var strSource ="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
      var ch;
      var i;
      var temp;
      
      for (i=0;i<=(str.length-1);i++)
      {
      
        ch = str.charAt(i);
        temp = strSource.indexOf(ch);
        if (temp==-1) 
        {
         return 1;
        }
      }
      if (strSource.indexOf(ch)==-1)
      {
        return 1;
      }
      else
      {
        return 0;
      } 
    }如果检测到编码不为英文字母或数字,则向后取一位,即str1.substring(3,8+1);
      

  5.   

    楼上的如果遇到符号怎么办??String sss = new String(s.getBytes("ISO8859_1"),"gb2312");
    这样再用substring就不会只取一半了,只是把英文汉字或符号都当做一个单元来处理
    然后:
    你可以做一个循环来读,一个单元一个单元的取,取一个单元s.getBytes("gb2312").length来判断一下长度,就可以达到你的目的!