4
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);

}
}

上記のコードは、Java 7 で次の出力を返します。

Input Array :[-5, -122, -28]
Array Length : 3
[-17, -65, -67]
Final Key :�

同じコードは、Java 8 で次の出力を返します。

Input Array :[-5, -122, -28]
Array Length : 3
[-17, -65, -67, -17, -65, -67, -17, -65, -67]
Final Key :���

Java8 は、デフォルトのシーケンス[-17, -65, -67].

この問題を修正する JDK 1.7 の出力と既知のバグに違いがあるのはなぜですか?

4

2 に答える 2

1

文字列 JavaDocごと:

指定された文字セットで指定されたバイトが有効でない場合のこのコンストラクタの動作は規定されていません。CharsetDecoder クラスは、デコード処理をより詳細に制御する必要がある場合に使用する必要があります。

于 2016-09-29T20:17:01.517 に答える