为什么 System.out.charset() 不等于 stdout.encoding

问题描述 投票:0回答:1

我的操作系统是Windows 10,系统默认的代码页是GBK。 JDK版本是21,Gradle版本是8.5。我使用 chcp 1252 来更改控制台编码。为了检查gradle守护进程的System.out.charset,我在build.gradle中使用了System.out.print(System.out.charset()),它是“utf-8”,而VM属性stdout Gradle守护进程的.encoding是1252。如果我使用java命令运行一个输出System.out.charset的类文件,则System.out.charset和stdout.encoding的输出都是1252。为什么Gradle守护进程输出不等于 stdout.encoding?

我尝试过的:一开始我以为是因为stdout.encoding不支持我指定的字符集。然而,直接使用java命令运行输出System.out.charset的类文件,显示支持我指定的字符集。 我预计 System.out.charset 应该等于 stdout.encoding。 请原谅我糟糕的英语。

java gradle character-encoding codepages
1个回答
0
投票

最终在gradle的源码中发现,gradle使用System.setOut修改输出流,因此System.props“stdout.encoding”与System.out.charset()不匹配。另外,gradle还修改了Sytem.props中的“stdout.encoding”,导致与控制台编码不一致。

© www.soinside.com 2019 - 2024. All rights reserved.