字符串与byte[]之间的相互转换问题

Lixin19821010 2009-04-28 05:39:21
刚学JAVA.有些东西不明白,请教各位高手。
receivedMessage = new String(eciCallCics.getRcCommarea(),"935").substring(106,new String(eciCallCics.getRcCommarea(),"935").length()) ;
eciCallCics.getRcCommarea()返回的是byte[]类型的数据。
我这里先将eciCallCics.getRcCommarea()转成了字符串,然后截取,取得我想要的信息。
但是由于中文汉字,造成了一点问题。需要先截取,后转成字符串。
想请大家帮忙。谢谢
...全文
184 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
pathuang68 2009-04-30
  • 打赏
  • 举报
回复
我曾经也碰到过类似的情况,主要是发生在不同的主机之间的通信时。不同的主机的编码是不一样的,建议你研究一下iconv,说不定会对你有帮助。

(兄弟碰到的情况:Symbian上的j2me客户程序和linux上的C++程序通信)
kimi 2009-04-30
  • 打赏
  • 举报
回复
receivedMessage = new String(tmp,"935"); 你这个地方的问题,把字符charset改改
Lixin19821010 2009-04-30
  • 打赏
  • 举报
回复
问题已经解决了:
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().
正如上面所说的,是不同机器之间的通讯。还是谢谢大家:)
fanchangyong 2009-04-29
  • 打赏
  • 举报
回复
new String(字符串,字符集);
用这一个构造方法,指定需要的字符集.
比如UTF-8 ,GBK
SimonYeung 2009-04-29
  • 打赏
  • 举报
回复
进来学习一下
zhb52014 2009-04-29
  • 打赏
  • 举报
回复
呵呵呵
想不到一个字符还这么复杂哈,又增长了点东东哈
Lixin19821010 2009-04-29
  • 打赏
  • 举报
回复
是的。从106位开始截取:)
wkchyl 2009-04-29
  • 打赏
  • 举报
回复
支持下,学习中!
qybao 2009-04-28
  • 打赏
  • 举报
回复
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");
GeekZFZ 2009-04-28
  • 打赏
  • 举报
回复
学习一下
real518 2009-04-28
  • 打赏
  • 举报
回复
用下StringBuffer.append(char[] str)看看。
Lixin19821010 2009-04-28
  • 打赏
  • 举报
回复
不管是先截取,后转换
还是先转换,后截取。
就是想得到应该得到的字符串。而我的字符串总是在出现汉字的地方少两位。
谢谢大家回复:)
Lixin19821010 2009-04-28
  • 打赏
  • 举报
回复
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位。类推。
kingssman 2009-04-28
  • 打赏
  • 举报
回复
怎么样了,上面两位说的方法可行吗?
ty_tarena_pger 2009-04-28
  • 打赏
  • 举报
回复
		byte[] b= new byte[1024];
String str = new String(b,0,b.length);
hbgzg3006 2009-04-28
  • 打赏
  • 举报
回复
receivedMessage = new String(tmp,"utf-8");
或者是
receivedMessage = new String(tmp,"gbk");
试试!
Lixin19821010 2009-04-28
  • 打赏
  • 举报
回复
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。
Lixin19821010 2009-04-28
  • 打赏
  • 举报
回复
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
  • 打赏
  • 举报
回复
没看明白

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧