处理产生奇怪结果的字节数组的字符串构造函数[重复]
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)。
【讨论】:
以上是关于处理产生奇怪结果的字节数组的字符串构造函数[重复]的主要内容,如果未能解决你的问题,请参考以下文章