首页 新闻 会员 周边

byte[]转字符串部分乱码

0
悬赏园豆:30 [已解决问题] 解决于 2019-06-12 15:08

用的netty通信,把传过来的数据转成bytebuf,我用new String(pak.getBody().array(), GGlobal.UTF_8))把字节数组转成字符串有一部分中文是成功的,有的是乱码� �� �T,这个乱码要怎么处理,我把编码类型换了一遍都没用。。。

小光的主页 小光 | 小虾三级 | 园豆:1766
提问于:2019-06-10 17:21
< >
分享
最佳答案
0

对方数据协议 应该会说明 内容是用什么编码 的 安装对应的解码

收获园豆:15
s_p | 初学一级 |园豆:138 | 2019-06-10 17:37

protected static System.Text.UTF8Encoding utfenc = new System.Text.UTF8Encoding(false);
byte[] buff = utfenc.GetBytes(str);
value = (ushort)buff.Length;
_stream.WriteByte((byte)(value));
_stream.WriteByte((byte)(value >> 8));
_stream.Write(buff, 0, buff.Length);
写流是这样写的

小光 | 园豆:1766 (小虾三级) | 2019-06-13 10:19
其他回答(1)
0

这部分是不是协议?这要看发送方是怎么定义的,你才知道怎么去处理

收获园豆:15
pencile | 园豆:845 (小虾三级) | 2019-06-10 21:22

protected static System.Text.UTF8Encoding utfenc = new System.Text.UTF8Encoding(false);
byte[] buff = utfenc.GetBytes(str);
value = (ushort)buff.Length;
_stream.WriteByte((byte)(value));
_stream.WriteByte((byte)(value >> 8));
_stream.Write(buff, 0, buff.Length);
写流是这样写的

支持(0) 反对(0) 小光 | 园豆:1766 (小虾三级) | 2019-06-13 10:19

@小光: 前两个byte是数据长度,

int len= array[0] &0xff;
len=(array[1]<<8) &0xff;

算出string的长度,array[2] 到 arrary[len] ,就是字符内容了。

支持(0) 反对(0) pencile | 园豆:845 (小虾三级) | 2019-06-14 09:19

@shotgun's_blog: 怎么给len赋值两次

支持(0) 反对(0) 小光 | 园豆:1766 (小虾三级) | 2019-06-14 16:05

@小光:
int len= array[0] &0xff;
len|=(array[1]<<8) &0xff00; //修正一下这里

支持(0) 反对(0) pencile | 园豆:845 (小虾三级) | 2019-07-01 21:22
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册