返回信息流utf-8进去的,utf-8解出来的为什么变了呢?
这是一条镜像帖。来源:北邮人论坛 / java / #38112同步于 2015/1/13
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
求大神new String(byteArray,"utf-8").getBytes("utf-8")为什么
container
2015/1/13镜像同步7 回复
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
你的byteArray是什么内容?我测了一下,英文和汉字都没有问题
byte[] byteArray = "汉字".getBytes();
byte[] byteArray2 = new String(byteArray, "utf-8").getBytes("utf-8");
System.out.println(Arrays.equals(byteArray, byteArray2));
结果是true
【 在 container (militia ) 的大作中提到: 】
: utf-8进去的,utf-8解出来的为什么变了呢?
我byteArray不是由字符串getBytes得到的,是一个普通的byte数组,经过算法得到的
【 在 dss886 的大作中提到: 】
: 你的byteArray是什么内容?我测了一下,英文和汉字都没有问题
: byte[] byteArray = "汉字".getBytes();
: byte[] byteArray2 = new String(byteArray, "utf-8").getBytes("utf-8");
: ...................
可能有非法字符?utf-8解码的时候自动忽略了?
【 在 container 的大作中提到: 】
: 我byteArray不是由字符串getBytes得到的,是一个普通的byte数组,经过算法得到的
:
如果本身不是unicode就可以解释了,我构造了一个不在unicode中的byte数组
byte[] byteArray = new byte[]{-128,-128,-128,-128};
byte[] byteArray2 = new String(byteArray, "utf-8").getBytes("utf-8");
System.out.println(Arrays.equals(byteArray, byteArray2));
结果是false,断点结果如下
我又试了一下,-128转换为String后是\ufffd,getBytes后是{-17,-65,-67}....
具体是哪一步进行了替换,我已经搞不太懂了。。等楼下大神解释
【 在 container 的大作中提到: 】
: 我byteArray不是由字符串getBytes得到的,是一个普通的byte数组,经过算法得到的
:
如果不是前面加了识别位,就是你这个原因
【 在 dss886 的大作中提到: 】
: 如果本身不是unicode就可以解释了,我构造了一个不在unicode中的byte数组
: byte[] byteArray = new byte[]{-128,-128,-128,-128};
: byte[] byteArray2 = new String(byteArray, "utf-8").getBytes("utf-8");
: ...................
btye[] data = new btye[]{'-','1'};
btye[] data = new btye[]{-1};
【 在 container 的大作中提到: 】
: utf-8进去的,utf-8解出来的为什么变了呢?