Java字符串到字节数组的转换问题

Java字符串到字节数组的转换问题,java,string,bytearray,Java,String,Bytearray,我试图将字节数组编码/解码为字符串,但输入/输出不匹配。我做错什么了吗 System.out.println(org.apache.commons.codec.binary.Hex.encodeHexString(by)); String s = new String(by, Charsets.UTF_8); System.out.println(org.apache.commons.codec.binary.Hex.encodeHexString(s.getBytes(Charsets.UTF

我试图将
字节数组
编码/解码为
字符串
,但输入/输出不匹配。我做错什么了吗

System.out.println(org.apache.commons.codec.binary.Hex.encodeHexString(by));
String s = new String(by, Charsets.UTF_8);
System.out.println(org.apache.commons.codec.binary.Hex.encodeHexString(s.getBytes(Charsets.UTF_8)));
输出为:

130021000061f8f0001a
130021000061efbfbd
完整代码:

String[] arr = {"13", "00", "21", "00", "00", "61", "F8", "F0", "00", "1A"};        
byte[] by = new byte[arr.length];

for (int i = 0; i < arr.length; i++) {
    by[i] = (byte)(Integer.parseInt(arr[i],16) & 0xff); 
}

System.out.println(org.apache.commons.codec.binary.Hex.encodeHexString(by));

String s = new String(by, Charsets.UTF_8);
System.out.println(org.apache.commons.codec.binary.Hex.encodeHexString(s.getBytes(Charsets.UTF_8)));
String[]arr={“13”、“00”、“21”、“00”、“00”、“61”、“F8”、“F0”、“00”、“1A”};
byte[]by=新字节[arr.length];
对于(int i=0;i
我的UTF-8有点生锈:-),但序列
F8 F0
不是有效的UTF-8编码


看看。

这里的问题是
f8f0001a
不是有效的UTF-8字节序列

首先,
f8
开头字节表示一个5字节的序列,而您只有4个。其次,
f8
后面只能跟一个字节,格式为
8x
9x
ax
bx
格式

因此,它被一个
unicode替换字符(U+FFFD)
替换,UTF-8中的字节序列是
efbfbd

而且(正确地)不能保证无效字节序列与字符串之间的转换会产生相同的字节序列。(请注意,即使使用两个看似相同的字符串,也可能会得到不同的字节,以Unicode表示,请参阅。)

这个故事的寓意是:如果你想表示字节,不要将它们转换为字符;如果你想表示文本,不要使用字节数组。

当你从字节数组构建数据时,字节会被解码

由于代码中的字节不代表有效字符,因此最终组成的字节与作为参数传递的字节不同

通过解码 使用平台的默认字符集指定的字节数组。这个 新的
字符串的长度是字符集的函数,因此可以
不能等于字节数组的长度

这种行为 当给定字节在默认字符集中无效时,构造函数 没有具体说明。当需要更多时,应使用该类 需要对解码过程进行控制


你最初想达到什么目的?@biziclop我收到一个10字节的字符串,前3个字节代表数字1,后2个代表数字2,下一个字节代表数字3,其余4个字节代表数字4