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

时间:2009-07-04 14:52:29

标签: java unicode intellij-idea console

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

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

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

8 个答案:

答案 0 :(得分:12)

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在启动/调试应用程序时实例化的字符集。如果有人知道这背后的逻辑是什么,请告诉我们!

答案 1 :(得分:4)

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

答案 2 :(得分:2)

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

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

答案 3 :(得分:2)

转到帮助> 编辑自定义VM选项... ,然后添加以下选项:

-Dconsole.encoding=UTF-8
-Dfile.encoding=UTF-8

我不确定两者是否都是必要的,但对我有用。您需要重新启动IntelliJ才能应用更改。

我已经尝试过在Intellij中更改每个编码设置,在Gradle中设置这些选项并更改系统编码,这是唯一起作用的方法。

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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

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

Intellij 2017.3.1 (Community Edition)

答案 6 :(得分:0)

  1. 按照@Mike Nakis在回答中所说的去设置和更改项目编码。

  2. 就我而言,我必须执行另一步:

在IntelliJ IDEA开关的右下角编码为UTF-8 enter image description here

注意,如果您在班级中粘贴了一些具有不同编码的文本(在我的情况下,我是直接从浏览器粘贴了一段西里尔字母的文本),那么它将变得难看,但是没关系。 只需将其删除,然后切换到UTF-8后再放回去。

答案 7 :(得分:-1)

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

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

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

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

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