Java byte数组转换成String 乱码的问题

zhuyouyong 2013-12-16 02:44:13
代码如下所示


byte[] bytes = new byte[] { 50, 0, -1, 28, -24 };
String sendString = "";
try {
sendString=new String(bytes ,"UTF-8");
} catch (UnsupportedEncodingException e) {
// TODO 尚未处理异常
e.printStackTrace();
}
System.out.println(sendString);


想把字节码数组转换成String类型,用于网络传输,但是转换后发现String都是乱码,webService传输也是报错的,希望大家能帮忙解决。
...全文
38219 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
guishuanglin 2013-12-31
  • 打赏
  • 举报
回复
对了,还有一个关键的东西 String 是跨操作系统的,跨开发语言的. 如果你开发的 webservice 给出一个 String 不管对方是什么系统,什么程序都可以用你的服务, 你可以做成云.....
guishuanglin 2013-12-31
  • 打赏
  • 举报
回复
楼主,webservice 是可以转对象数组,但是对象序列化要大量时间,性能很差的, 我们测试中转 20个字段 3000行的bean数组要 20多秒(你说byte只能2000这个不理解,因为我们项目用传5000数组的bean都有), webservice 性能最高是只传一个约定格式的 String, 然后对方转换,为什么呢? 1 bean[3000]数组 ,bean 有20个字段 序列化次数为: 3000*20+1=60001 次, 双方都转就有: 60001*2=120002次, 花掉大量的传输,转换时间,并且不灵活(bean一变,人家要跟着变,否则对方报错,这是强依赖!). 2 如果自己转成 String(任何数据都能转成String), 双方只要实例化 2次 ......, 并且你增加东西,不影响对方的程序,他可以不读取增加部分. 3 你可能会问,自己转换麻烦,并且也要时间, 但是内存操作的时间程序中基本让可以不计!!
zhuyouyong 2013-12-20
  • 打赏
  • 举报
回复
引用 9 楼 guishuanglin 的回复:
你就这么点数据 webservice 完全没问题,我用webservice送过 30万行xml,约有50M大完全没问题. 主要是在编码转换问题上: byte[] bytes = new byte[] { 50, 0, -1, 28, -24 }; 你才5个字节,如果有汉字会出错的, utf-8是三字节一个汉字,不信用你汉字转一下: "汉".getBytes("utf-8") 看看是多长.
问题已经解决,谢谢大家。 如果将一张1M的jpg序列化,再把byte数组作为参数传递,就会有问题,webservice只会取前2000多个元素。。。
Inhibitory 2013-12-19
  • 打赏
  • 举报
回复
千年不变的乱码问题,几句话说不清楚,网上关于编码的文章很多,静下心来好好看看。
guishuanglin 2013-12-19
  • 打赏
  • 举报
回复
你就这么点数据 webservice 完全没问题,我用webservice送过 30万行xml,约有50M大完全没问题. 主要是在编码转换问题上: byte[] bytes = new byte[] { 50, 0, -1, 28, -24 }; 你才5个字节,如果有汉字会出错的, utf-8是三字节一个汉字,不信用你汉字转一下: "汉".getBytes("utf-8") 看看是多长.
xiaanming 2013-12-19
  • 打赏
  • 举报
回复
你读取图片用的是什么编码,如果没有设置的话就是系统默认的 楼主顺便帮我戳一下http://vote.blog.csdn.net/blogstaritem/blogstar2013/xiaanming
oh_Maxy 2013-12-16
  • 打赏
  • 举报
回复
引用 6 楼 zhuyouyong 的回复:
[quote=引用 5 楼 oh_Maxy 的回复:] webservice服务端提供的方法签名是什么样子的?感觉byte[]类型应该不会有传输问题的。
byte[] 类型传递的时候,在byte[]长度过长时会导致数据丢失,我的问题和这个帖子是一样一样的。 http://bbs.csdn.net/topics/390200842[/quote] 好吧,那个帖子2L 4L讲的也不错,Base64,你的问题解决了吗?
zhuyouyong 2013-12-16
  • 打赏
  • 举报
回复
引用 5 楼 oh_Maxy 的回复:
webservice服务端提供的方法签名是什么样子的?感觉byte[]类型应该不会有传输问题的。
byte[] 类型传递的时候,在byte[]长度过长时会导致数据丢失,我的问题和这个帖子是一样一样的。 http://bbs.csdn.net/topics/390200842
oh_Maxy 2013-12-16
  • 打赏
  • 举报
回复
引用 4 楼 zhuyouyong 的回复:
[quote=引用 2 楼 oh_Maxy 的回复:] { 50, 0, -1, 28, -24 }; 是怎么得来的?
byte数组是读取一张图片生成的,此处只是一个举例说明。想把这个byte[] 作为参数传递到一个webservice接口中,直接传出现问题,所以想转换成String来传。[/quote] webservice服务端提供的方法签名是什么样子的?感觉byte[]类型应该不会有传输问题的。
zhuyouyong 2013-12-16
  • 打赏
  • 举报
回复
引用 2 楼 oh_Maxy 的回复:
{ 50, 0, -1, 28, -24 }; 是怎么得来的?
byte数组是读取一张图片生成的,此处只是一个举例说明。想把这个byte[] 作为参数传递到一个webservice接口中,直接传出现问题,所以想转换成String来传。
jdgdf566 2013-12-16
  • 打赏
  • 举报
回复
使用序列化可以么,转换为字符串肯定是不合适的。
oh_Maxy 2013-12-16
  • 打赏
  • 举报
回复
{ 50, 0, -1, 28, -24 }; 是怎么得来的?
msj100ff 2013-12-16
  • 打赏
  • 举报
回复
为什么不直接传字节数组,还要转成string? 而且,你那个字节数组是utf8编码后的字节码吗? 不是的话转成string当然是乱码

62,634

社区成员

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

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