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”);