2016-09-29 67 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 bug?)]的可能重复(http://stackoverflow.com/questions/25404373/java-8-utf-8-encoding-issue-java-bug ) – DVarga

回答

1

String JavaDoc

此构造时给出的字节是不是在给定的charset有效的行为是不确定的。当需要对解码过程进行更多控制时,应该使用CharsetDecoder类。

1

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

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

+0

它对它没有任何意义。代码中注释的其他字节数组行为不同,并且是此问题的其他示例。 –

相关问题