我正在尝试使用System.out编写unicode字符(♠),而是打印一个问号。
如何显示正确的unicode字符而不是问号?
我在Windows上使用IntelliJ IDEA,并尝试在IDE中打印。
答案 0 :(得分:12)
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(社区版)文件|设置|编辑>文件编码。点击下面的链接查看设置图片
答案 6 :(得分:0)
按照@Mike Nakis在回答中所说的去设置和更改项目编码。
就我而言,我必须执行另一步:
注意,如果您在班级中粘贴了一些具有不同编码的文本(在我的情况下,我是直接从浏览器粘贴了一段西里尔字母的文本),那么它将变得难看,但是没关系。 只需将其删除,然后切换到UTF-8后再放回去。
答案 7 :(得分:-1)
您的计算机上是否安装了相应的字体?当您没有输出要输出的字符的字体时,会出现问号。
另外,您是通过执行System.out.println(“”)输出的吗?如果是这样,只需安装字体即可。
如果您尝试从程序中写入System.out,那就不同了。您必须使用OutputStreamWriter,它是一个字符流。您不能只写入面向字节的流,如OutputStream。
查找OutputStreamWriter和子类(如PrintWriter)的API和类引用。您构造它给出构造函数的语言环境。例如,
PrintWriter pw = new PrintWriter(System.out,“UTF-8”);