字符串(bytes[]字符集)在Java7和Java8中返回的结果不同

字符串(bytes[]字符集)在Java7和Java8中返回的结果不同,java,character-encoding,jdk1.7,Java,Character Encoding,Jdk1.7,上面的代码在Java7中返回以下输出 import java.io.UnsupportedEncodingException; import java.nio.charset.StandardCharsets; import java.util.Arrays; public class Java87String { public static void main(String[] args) throws UnsupportedEncodingException { // T

上面的代码在Java7中返回以下输出

import java.io.UnsupportedEncodingException;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;

public class Java87String {

public static void main(String[] args) throws UnsupportedEncodingException {
        // TODO Auto-generated method stub

        //byte[] b = {-101, 53, -51, -26, 24, 60, 20, -31, -6, 45, 50, 103, -66, 28, 114, -39, 92, 23, -47, 32, -5, -122, -28, 79, 22, -76, 116, -122, -54, -122};
        //byte[] b = {-76, -55, 85, -50, 80, -23, 27, 62, -94, -74, 47, -123, -119, 94, 90, 61, -63, 73, 56, -48, -54, -4, 11, 79};

        byte[] b = { -5, -122, -28};

        System.out.println("Input Array :" + Arrays.toString(b));
        System.out.println("Array Length : " + b.length);                       
        String target = new String(b,StandardCharsets.UTF_8);
        System.out.println(Arrays.toString(target.getBytes("UTF-8")));
        System.out.println("Final Key :" + target);

}
}
同样的代码在Java8中返回以下输出

Input Array :[-5, -122, -28]
Array Length : 3
[-17, -65, -67]
Final Key :�
听起来Java8用默认序列
[-17,-65,-67]
替换是正确的

为什么JDK 1.7中的输出和修复此问题的任何已知错误之间存在差异?

我认为
(-5,-122,-28)
是无效的UTF-8字节序列,因此JVM可能会在这种情况下输出任何内容。如果它是有效的,那么不同的Java版本可能会显示相同的输出

这个特定的字节序列有意义吗?只是好奇

根据:

当给定字节在给定字符集中无效时,此构造函数的行为未指定。当需要对解码过程进行更多控制时,应使用CharsetDecoder类


它可能的复制品对它没有任何意义。代码中注释的其他字节数组的行为确实不同,并且是此问题的其他示例。
Input Array :[-5, -122, -28]
Array Length : 3
[-17, -65, -67, -17, -65, -67, -17, -65, -67]
Final Key :���