19

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

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

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

4

8 回答 8

21

转到Help>Edit Custom VM options...然后添加以下选项:

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

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

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

于 2019-11-16T01:58:53.380 回答
15

2015年的小更新

TL;DR 答案:

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

扩展答案:

System.out.print()通过在调用上放置断点可以找到它不起作用的原因。当断点命中时,您可以添加System.outto 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启动/调试应用程序时实例化的字符集。如果有人知道这背后的逻辑是什么,请告诉!

于 2015-04-02T21:16:52.877 回答
6

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

于 2009-07-04T15:06:18.693 回答
2

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

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

于 2009-07-04T14:56:03.723 回答
1
  1. 按照@Mike Nakis 在他的回答中所说的去设置和更改项目编码。

  2. 就我而言,我不得不做一个额外的步骤:

在 IntelliJ IDEA 的右下角切换编码为 UTF-8 在此处输入图像描述

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

于 2018-12-24T14:39:08.213 回答
0

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

于 2009-07-04T16:19:10.163 回答
0

设置未正确配置,请确保您的文件编码设置为 UTF-8,尤其是“默认编码属性文件”。在我这边,在我更改默认编码之前,以下步骤不起作用。

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

Intellij 2017.3.1(社区版)

于 2018-03-13T07:17:28.523 回答
-1

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

另外,您是否通过执行输出System.out.println("<your string>")?如果是这样,只需安装字体即可。

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

查找 API 和类参考OutputStreamWriter以及子类,例如PrintWriter. 您构造它并给出构造函数的语言环境。例如,

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

于 2009-07-04T15:49:14.863 回答