System.out.println:为什么非可打印字符只显示在可打印字符之前而不显示在可打印字符之前?

时间:2019-11-05 19:29:41

标签: java

如果我们举这个例子:

System.out.println(new String(new byte[]{0,0,0,0,1,1,1,1,2,2,2,2,0,0,0,0,112,0,0,0}));

控制台将显示一些正方形(不可显示的字符),然后显示字符“ p”(112)。为什么下三个“正方形”不显示?

1 个答案:

答案 0 :(得分:2)

字符为NUL,SOH和STX。我认为您的字体将NUL映射为“无”。对于SOH和STX来说可能并非如此。

在尝试在本地重现此代码(在运行Raspbian的Raspberry Pi-zero系统上,通过腻子从Windows 10连接)上,我在控制台上仅看到“ p”。如果我将输出重定向到一个文件,然后在合适的编辑器中进行检查,则会看到所有NUL,SOH和STX。

换句话说,您看到的内容高度依赖于Java以外的几乎所有其他内容。

(您的Java语言环境可能会起作用,但是我认为字节值0到31直接映射为等效char值的可能性更大)