String.getBytes乱码

我没有中文啊,为什么也乱码

原字符
42 "SmallBeer" 3 5 1 3 2 6 1 1 0 2 130 1 40 1 2 0 0 0 20 60 |

到程序里面是

            String s = "42            \"SmallBeer\"        3               5                   1                   3                    2                      6                     1                         1                     0                     2                   130                     1              40               1              2                0              0                0               20                   60                   | \r\n";
                    byte[] _b  = s.getBytes("US-ASCII");
                    byte[] _bn  = s.getBytes();
                    byte[] _bu  = s.getBytes("UTF-8");
                    System.out.println(_b.toString());
                    Arrays.asList(_b).forEach(
                            b->{System.out.print(b+" ");});
                    
                    System.out.println();
                    System.out.println(_bn.toString());
                    Arrays.asList(_bn).forEach(
                            b->{System.out.print(b+" ");});
                    System.out.println();
                    System.out.println(_bu.toString());
                    Arrays.asList(_bu).forEach(
                            b->{System.out.print(b+" ");});

结果output

[B@74b0dfcd
[B@74b0dfcd
[B@32a87423
[B@32a87423
[B@20220e64
[B@20220e64

怎么完全不一样。

啊!啊!!啊!!!

阅读 2.5k
1 个回答

首先那不算是乱码,只是地址
打印数组 不是有 Arrays.toString()
另外你调用 Arrays.asList(_b)实际得到的是 byte[][]
Arrays 有个方法是 stream 但是不支持 byte[], 所以老老实实for循环吧
另外:commons-lang3 包有个 ArrayUtils.toObject() 能把基本类型数组转成对应的包装类数组, 这样 Arrays.stream() 就能用了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏