【问题标题】:String constructor to handle byte array producing weird result [duplicate]处理产生奇怪结果的字节数组的字符串构造函数[重复]
【发布时间】:2014-07-05 08:35:30
【问题描述】:

我正在使用隐式 String 构造函数来处理字节数组..但结果很奇怪。为了正确的输出,我是否需要做更多的事情..?任何帮助将不胜感激。这是我的代码..

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

打印出来:

第一个:?"?AX_

第二个:?AX

【问题讨论】:

  • 您的预期输出是什么? 23 和 20 不是可打印字符,34 是 ",65 是 A,88 是 X,95 是 _
  • @rgettman:是的,你是对的,我刚刚尝试过从 65 开始,就像我的书籍示例所做的那样,打印效果很好..但这是怎么回事
  • Protip:养成明确指定编码的习惯..

标签: java string byte


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    您使用的String() 构造函数根据您的Java 环境的默认字符集 解释数组中的字节。这可能会有所不同。

    如果您要使用特定的字符编码,例如“US-ASCII”或“UTF-8”,则应使用不同的构造函数指定字符集,例如:String(byte[] bytes, String charsetName)

    【讨论】:

      猜你喜欢
      • 2022-01-23
      • 1970-01-01
      • 2018-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-20
      相关资源
      最近更新 更多