我向this problem寻求帮助,当我想从表中转换字节
时`[0, 0, 0, 0, 0, 0, 0, 0, 122, 98, 117, 54, 46, 0, 0, 115, 122, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 116, 121, 116, 117, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 107, 111, 98, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122, 42, 109, 111, 119, 40, 0, 0, 0, 0, 0, 0, 107, 111, 98, 0, 0, 0, 0, 0, 98, 111, 40]`
成字符并打印此字符。当我做:
for(byte b: byteArray){
System.out.print((char) b);
}
我的控制台上没有任何内容。甚至滚动条的长度也相同。 但是当我做的时候:
for(byte b: byteArray){
System.out.println((char) b);
}
效果很好。 我认为这是日食问题,而不是代码。我取消选中限制控制台输出,但没有帮助。
答案 0 :(得分:0)
我会尝试排除不可打印的字符,例如0
for(byte b: byteArray){
System.out.print(b >= 32 ? (char) b : "");
}
您可以将所需的空白字符串替换为“?”或“[ascii_code]”......
我已经使用您的数据进行了测试,在我的Eclipse(OSX)中出现了两种情况,我的代码:
public static void main(String[] args) {
byte[] bytes =
{ 0, 0, 0, 0, 0, 0, 0, 0, 122, 98, 117, 54, 46, 0, 0, 115, 122, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 116, 121, 116, 117, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 107, 111, 98, 105, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 122, 42, 109, 111, 119, 40, 0, 0, 0, 0, 0, 0, 107, 111, 98, 0, 0, 0, 0, 0, 98, 111, 40 };
System.out.println("Init...");
for (byte b : bytes) {
System.out.print((char) b);
}
System.out.println();
System.out.println();
for (byte b : bytes) {
System.out.print(b >= 32 ? (char) b : "?");
}
System.out.println();
System.out.println("End");
}
输出是:
Init...
zbu6.sz*tytul kobiz*mow(kobbo(
????????zbu6.??sz*???????????tytul?????????????????????? kobi????????????????????????????????????????????????????????????????????????????????????z*mow(??????kob?????bo(
End
答案 1 :(得分:0)
char为2字节,如果字节数超出范围-128到127,
答案 2 :(得分:0)
尝试做
for(byte b: byteArray){
System.out.print((char) b);
}
System.out.println();
当您不打印print
\n
可能会被缓冲而不会显示
答案 3 :(得分:0)
问题出在您的环境中。
我的eclipse控制台用你的第一个循环输出:
有趣的是,我无法复制/粘贴此输出。我认为它是\ 0字节错误。
答案 4 :(得分:0)
控制台对通常用作null character的a string terminator \u0000
反应不佳。
Eclipse使用SWT,它经常使用本机控件,因此可能是底层UI工具包中存在缺陷或者SWT如何使用它。
之前已经报告过 - Bug 362957 - The Console does not display '\u0000' correctly - 因此您可能希望将输入添加到错误报告中并对其进行投票。
我会包括: