2016-09-29 22 views
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で次の出力を返す文字列(バイト[]文字セット)はJava7に異なる結果を返すされ、Java 8

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の出力と既知のバグが異なるのですか?

+0

[Java 8 UTF-8エンコーディングの問題(Javaのバグ?)]の可能な複製(http://stackoverflow.com/questions/25404373/java-8-utf-8-encoding-issue-java-bug) ) – DVarga

答えて

1

String JavaDocパー:

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

1

私は(-5, -122, -28)が無効なUTF-8バイトシーケンスであると思うので、この場合はJVMが何かを出力することがあります。それが有効なものだった場合、異なるJavaバージョンが同じ出力を示す可能性があります。

この特定のバイトシーケンスは意味を持ちますか?ただ好奇心

+0

意味がありません。コードにコメントされている他のバイト配列は、動作が異なり、この問題の他の例です。 –

関連する問題