从Java

时间:2018-11-28 16:39:58

标签: java ascii

我有一个问题,关于在运行Java程序时在终端窗口中显示西装符号(ASCII)(心形,菱形,锹形和棍形)。我目前正在使用JCreator V3 LE。我使用的JDK是1.8.0_172。

过去,我使用以下语法:

Character.toString((char) 3)
Character.toString((char) 4)
Character.toString((char) 5)
Character.toString((char) 6)

现在,它显示一个带有?的框。在其中,好像找不到该字符。还有另一种方法,还是从窗口中删除了此字符?

谢谢。

1 个答案:

答案 0 :(得分:1)

与所有文本传输一样,您的Java程序(编写器)和终端(读取器)必须位于同一页上,即“代码页”(字符编码)。您说的是ASCII,但ASCII不支持您要使用的字符。您可能正在考虑MS-DOS和Windows中的CP437。 (MS-DOS没有ASCII代码页;为了完整起见,Windows的使用寿命很晚。仅在非常特殊的上下文中使用ASCII。)

如果要将Java的字符转码排除在等式之外,则可以将字节写入输出流。然后,无论它们对终端意味着什么,它都会将其解码为字符。

// for illustration purposes only; I would not invest in code like this.
System.out.flush();
System.out.write(0x03);
System.out.flush();

要真正看到它们,终端必须具有包含已解码字符的字体。白框或带问号的框表示该字体没有。黑色菱形中的问号或问号表示字节在终端的字符编码中没有任何意义。

要检查终端的字符编码,请转到chcp(Windows)或locale(大多数其他操作系统)。

正如@VGR在注释中所述,GUI更为简单。这是因为它们避免了使用特定字符编码创建文本字节流的概念,而只是使用窗口系统的功能来绘制文本。 (这是以无法将输出通过管道传输到另一个程序或将其重定向到文件为代价的,这是CUI程序的关键功能。)

相关问题