刚学JAVA.有些东西不明白,请教各位高手。
receivedMessage = new String(eciCallCics.getRcCommarea(),"935").substring(106,new String(eciCallCics.getRcCommarea(),"935").length()) ;
eciCallCics.getRcCommarea()返回的是byte[]类型的数据。
我这里先将eciCallCics.getRcCommarea()转成了字符串,然后截取,取得我想要的信息。
但是由于中文汉字,造成了一点问题。需要先截取,后转成字符串。
想请大家帮忙。谢谢

解决方案 »

  1.   

    byte[] tmp = new byte[1000];
    System.arraycopy(eciCallCics.getRcCommarea(),0,tmp,0,1000);
    receivedMessage = new String(tmp);
    System.out.println(receivedMessage);
    System.out.println(receivedMessage.length());但是这样输出的是乱码:
    簌馌@@@@@@@@@@@@@@@@@@@@@@@@@@@@@躜蝙@@@@痱痧篁錾楌餈@@鹫痧蝠瘗痿蝤聒瘃篁痧蝮鲶鳣@@@@@@@@@@@@@@@@鲴瘐痧瘌鲽蝣耩痧耨蝠耩篑躔鲴耨餈@@@@@@@@@@@@@@@@@@@@@M鵗颰_@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@蠕@黉葽厣琳茾@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@馌@@@馌@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@鬇@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@馌@@@@@@@@@@@@@@@@@@@@@@@@@@@@馌@@@@@@@@@@@@@@@@@魼@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@馌@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@蠕@黉葽厣琳茾@@@@@@@@@@@@@@@@@@@@@@@@@@@聩黪瘀聩聃鲴貊﹫﹫耖棂鳣@蝙餈@@@餈@@@@@@@@@鲳痧K痧@@@@餈@@@餈@@@餈@@@餈@@@餈@@@餈@@@@@@餈@@@餈@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@V隣揥\U鑃匳m[蟈@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    888
      

  2.   

    eciCallCics.getRcCommarea()是byte[]格式的。
    receivedMessage = new String(eciCallCics.getRcCommarea(),"935").substring(106,new String(eciCallCics.getRcCommarea(),"935").length()) ; 
    这句话先运行的是new String(eciCallCics.getRcCommarea(),"935"),也就是说,先转化成String类型的。然后进行了substring的工作。我想换个顺序,先将byte[]截取想要的信息,然后转换成String。
      

  3.   

    receivedMessage = new String(tmp,"utf-8"); 
    或者是
    receivedMessage = new String(tmp,"gbk");
    试试! 
      

  4.   

    byte[] b= new byte[1024];
    String str = new String(b,0,b.length);
      

  5.   

    byte[] tmp = new byte[1100];
    System.arraycopy(eciCallCics.getRcCommarea(),0,tmp,0,1100);
    receivedMessage = new String(tmp,"935");
    receivedMessage = receivedMessage.substring(106, receivedMessage.length());
    System.out.println(receivedMessage);
    System.out.println(tmp.length);
    我这样做了。但是还是有错。
    我实际得到的字符串是:
    “胡强                                                    HU RUI QIANG”
    而应该得到的字符串是:
    “胡强                                                      HU RUI QIANG”
    以及:凡是出现一次汉字的地方,汉字以后的字符就要提前两位,出现两次汉字,以后的字符就要提前4位。类推。
      

  6.   

    用下StringBuffer.append(char[] str)看看。
      

  7.   

    106设么意义?要从这个位置开始截取吗?
    试试看byte[] b1 = eciCallCics.getRcCommarea();
    byte[] b2 = new byte[b1.length-106];
    System.arraycopy(b1, 106, b2, 0, b2.length);
    String receivedMessage = new String(b2, "935");
      

  8.   

    new String(字符串,字符集);
    用这一个构造方法,指定需要的字符集.
    比如UTF-8 ,GBK
      

  9.   

    我曾经也碰到过类似的情况,主要是发生在不同的主机之间的通信时。不同的主机的编码是不一样的,建议你研究一下iconv,说不定会对你有帮助。(兄弟碰到的情况:Symbian上的j2me客户程序和linux上的C++程序通信)
      

  10.   

    receivedMessage = new String(tmp,"935"); 你这个地方的问题,把字符charset改改
      

  11.   

    问题已经解决了:
    PersonInfo.java:
    private byte[] xmpy = new byte[80];
    public void setXmpy(byte[] newByte)
    {
    xmpy = newByte;
    }
    public byte[] getXmpy()
    {
    return xmpy;
    }
    调用: byte[] tmp = new byte[80];
    System.arraycopy(src,106+122,tmp,0,80);
    personInfo.setXmpy(tmp);

    还是返回byte[]流,然后按照位一段一段的截取,这样的话就不会出问题了。而不是
    全部截取过来,然后SUBSTRING().
    正如上面所说的,是不同机器之间的通讯。还是谢谢大家:)