关于java:用于处理字节数组的String构造函数,产生奇怪的结果

String constructor to handle byte array producing weird result

本问题已经有最佳答案,请猛点这里访问。

我正在使用隐式字符串构造函数来处理字节数组..但结果很奇怪。我需要做更多的事情来获得正确的输出吗?任何帮助都将不胜感激。这是我的密码……

1
2
3
4
5
6
7
    byte[] arr = { 23, 34, 20, 65, 88, 95 };

    String s1 = new String(arr);
    System.out.println("First:"+s1);

    String s2 = new String(arr, 1, 3);
    System.out.println("Second:"+s2);

它打印:

First: ?"?AX_

Second: ?AX


您正在使用的EDCOX1×0构造函数是根据Java环境的默认字符集来解释数组中的字节。这可能有所不同。

如果要使用特定的字符编码,如"US-ASCII"或"UTF-8",则应使用不同的构造函数指定字符集,如:string(byte[]bytes,string charsetname)。


这是正确的。这些是您提供的代码的字符。如果将字节数组更改为这个,您将看到字符a-f:

1
byte[] arr = { 97, 98, 99, 100, 101, 102 };