刚学JAVA.有些东西不明白,请教各位高手。
receivedMessage = new String(eciCallCics.getRcCommarea(),"935").substring(106,new String(eciCallCics.getRcCommarea(),"935").length()) ;
eciCallCics.getRcCommarea()返回的是byte[]类型的数据。
我这里先将eciCallCics.getRcCommarea()转成了字符串,然后截取,取得我想要的信息。
但是由于中文汉字,造成了一点问题。需要先截取,后转成字符串。
想请大家帮忙。谢谢
receivedMessage = new String(eciCallCics.getRcCommarea(),"935").substring(106,new String(eciCallCics.getRcCommarea(),"935").length()) ;
eciCallCics.getRcCommarea()返回的是byte[]类型的数据。
我这里先将eciCallCics.getRcCommarea()转成了字符串,然后截取,取得我想要的信息。
但是由于中文汉字,造成了一点问题。需要先截取,后转成字符串。
想请大家帮忙。谢谢
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
receivedMessage = new String(eciCallCics.getRcCommarea(),"935").substring(106,new String(eciCallCics.getRcCommarea(),"935").length()) ;
这句话先运行的是new String(eciCallCics.getRcCommarea(),"935"),也就是说,先转化成String类型的。然后进行了substring的工作。我想换个顺序,先将byte[]截取想要的信息,然后转换成String。
或者是
receivedMessage = new String(tmp,"gbk");
试试!
String str = new String(b,0,b.length);
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位。类推。
试试看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");
用这一个构造方法,指定需要的字符集.
比如UTF-8 ,GBK
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().
正如上面所说的,是不同机器之间的通讯。还是谢谢大家:)