当前位置: 首页 > 知识库问答 >
问题:

当我使用java18时,IDEA控制台打印乱码文本而不是中文

全丰
2023-03-14

我是一名中国程序员。今天我尝试将我的project JDK版本从16升级到18。(同时将IDEA2021升级到2022)但我遇到了一个问题,IDEA控制台打印的是乱码文本,而不是中文。下面是代码和控制台输出。问题形象

我尝试了很多方法来解决它,但失败了,然后我在CMD和github CI中重新运行它,然后这个错误消失了。CMD图像

当我将JDK回滚到16时,这个错误也消失了,似乎这个错误只发生在JDK18和IDEA控制台中,我该如何解决它?

另外:我的单元测试也坏了。错误图像

补充2:我尝试了不同的chcp,结果正确。65001 936

我认为JEP400有问题,所以我运行了这些代码

System.out.println("Default charset : " + Charset.defaultCharset());
System.out.println("file.encoding   : " + System.getProperty("file.encoding"));
System.out.println("native.encoding : " + System.getProperty("native.encoding"));
System.out.println("你好");

在JDK16上,它打印了:

Default charset : UTF-8
file.encoding   : UTF-8
native.encoding : null
你好

在JDK17上,它打印

Default charset : UTF-8
file.encoding   : UTF-8
native.encoding : GBK
你好

在JDK18上,它打印了

Default charset : UTF-8
file.encoding   : UTF-8
native.encoding : GBK
���

共有1个答案

萧晓博
2023-03-14

根据https://youtrack.jetbrains.com/issue/IDEA-291006我添加了-d文件。在VM选项中,encoding=gbk,并对其进行求解。我觉得这是个想法错误。

 类似资料:
  • 问题内容: 我想打印任何文本而不在Java中使用system.out.println()吗?如果可以,那么怎么办?任何想法。 问题答案:

  • 问题内容: 我有一个类,我们称它为Cls,其中包含一些值。当我使用声明为的Gson实例并将其用于序列化Cls对象并将结果JSON字符串打印到控制台时,我得到了格式正确的格式,如下所示: 这一切都很好,但是当我然后创建一个JsonWriter(从具有绝对路径的FileWriter)并使用带有Cls 的Gson实例的方法时,生成的文件就不会得到很好的格式化。相反,它看起来像这样: 这打败了漂亮印刷的全

  • 我真的被困在作业的这一特定部分,它要求我将简单文本打印到控制台中,然后创建一个文件(无论主文件中的std::string文件名是什么),并将控制台的内容打印到该文件中。 我真的很困惑,因为该函数需要ostream,而且它还需要该函数使用任何文件名(在本例中是statistics.txt,只是为了测试该函数是否工作)。 函数是PrintStatistics。 我知道我可以使用cout在控制台上打印,

  • 问题语句:我有一个在Xcode中运行的程序,它有一堆print()语句,可以很好地将输出打印到调试控制台。然而,我希望也能够将这些输出重定向到一个文件,这样我就可以让用户将它们发送给我,作为调试的一种方式。 SO上找到的解决方案使我可以将输出重定向到文件,但调试控制台输出将丢失。 问:我想要我的蛋糕和吃它。我希望能够将print()语句重定向到调试控制台和文件。 所以我有引用:https://st

  • 将特殊字符添加到文本中,以在控制台中以彩色方式打印(与 console.log() 结合使用)。 使用模板字面量和特殊字符将相应的颜色代码添加到字符串输出中。 对于背景颜色,添加一个特殊字符,在字符串的末尾重置背景颜色。 const colorize = (...args) => ({ black: `\x1b[30m${args.join(' ')}`, red: `\x1b[31m${

  • 问题内容: 如何在C中擦除当前打印的控制台行?我正在Linux系统上工作。例如 - 我想在同一行上打印再见,代替您好。 问题答案: 您可以使用VT100转义码。包括xterm在内的大多数终端都支持VT100。要擦除线,此为。在C中,它给出: