IntelliJ IDEA控制台中的unicode字符显示为问号

我正在尝试使用System.out编写unicode字符(♠),而是打印一个问号。

如何显示正确的unicode字符而不是问号?

我在Windows上使用IntelliJ IDEA,并尝试在IDE中打印。

文件编码配置是否正确? 请参阅“设置|文件编码”使用UTF-8。 当我使用IDE编码并且所有文件都设置为UTF-8时,打印♠适用于我。 更改编码后可能需要重新编译。

2015年的一点点更新

TL; DR回答:

转到Settings – > Editor – > File Encodings – > Project Encoding并将其设置为“UTF-8”。

扩大答案:

可以通过在System.out.print()调用上放置断点来找到它无法工作的原因。 当断点命中时,您可以将System.out添加到Watches ,您可以看到System.out.textOut.out.se.cs设置为windows-1252或类似的东西不适合。

神奇地为我工作的设置(我不知道为什么)在Settings – > Editor – > File Encodings – > Project Encoding 。 您需要将其设置为“UTF-8”。

然后,unicode字符在控制台上正确显示,并且使用调试器再快速查看一下,显示System.out.textOut.out.se.cs的值已神奇地变为UTF-8

我说“神奇地”,因为我没有看到编辑器设置如何以及为什么会影响System.out在启动/调试应用程序时实例化的字符集。 如果有人知道这背后的逻辑是什么,请告诉我!

System.out使用底层操作系统的默认编码,通常为ISO-8859-1或UTF-8。 第一个是我在XP下的1252代码页。

这是在CMD.EXE窗口中,还是在IDE中?

如果您最终希望在Windows上的标准命令行上打印各种Unicode字符,则需要进行一些工作。 默认光栅字体不支持字符,应用程序通常需要调用Unicode控制台API来呈现它们。 Java没有 – 它首先将字符编码为本机字符集(有损进程),然后使用ANSI调用发出它们。 如果您想了解血腥细节,可以阅读此博客文章 。

未正确配置设置,请确保将文件编码设置为UTF-8,特别是“默认编码属性文件”。 在我这边,以下步骤在我更改默认编码之前无效。

在Intellij 2017.3.1(社区版)文件| 设置| 编辑器>文件编码。 点击下面的链接查看设置图像

Intellij 2017.3.1(社区版)

您的计算机上是否安装了适当的字体? 当您没有输出要输入的字符的字体时,会出现问号。

另外,您是通过执行System.out.println(“”)输出的吗? 如果是这样,只需安装字体即可。

如果您尝试从程序中写入System.out,那就不同了。 您必须使用OutputStreamWriter,它是一个字符流。 您不能只写入面向字节的流,如OutputStream。

查找OutputStreamWriter和子类(如PrintWriter)的API和类引用。 您构造它给出构造函数的语言环境。 例如,

PrintWriter pw = new PrintWriter(System.out,“UTF-8”);