处理产生奇怪结果的字节数组的字符串构造函数[重复]

Posted

技术标签:

【中文标题】处理产生奇怪结果的字节数组的字符串构造函数[重复]【英文标题】: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:养成明确指定编码的习惯.. 【参考方案1】:

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

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

【讨论】:

【参考方案2】:

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

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

【讨论】:

以上是关于处理产生奇怪结果的字节数组的字符串构造函数[重复]的主要内容,如果未能解决你的问题,请参考以下文章

`std::find()` 用字符串产生奇怪的结果

如何在构造函数中初始化指向字符串的指针数组[重复]

C ++奇怪的堆栈变量和函数行为

AS3函数产生数组的组合,没有重复

数组与文字处理

在没有库的情况下读取 Excel 文件