Java Gradle Eclipse - UTF-8 符号在 IDE 构建之前显示,但在构建之后不显示

Java Gradle Eclipse - UTF-8 symbols showing before build in IDE but not after build

我对编码还很陌生,目前我正在尝试在 Eclipse 中使用 gradle 构建我的第一个胖 JAR。我的项目生成一个 HTML 文件,其中包含我从 JSON 文件中获取的数据。那里的一些字符串使用 UTF-8 symbols/emojis。我设法使用“Jackson”并通过对字符串使用 getBytes() 方法将它们放入我的 java 对象中。当我从 eclipse 中的那些对象生成 HTML 时,它们以正确的方式显示(在 eclipse 之外的浏览器中打开时)。 问题出现了,当我用“gradlew jar”构建 fat jar 时(我不得不在 build.gradle 中对 jar 进行一些更改以使其包含依赖项)。 一切正常,除了未显示 UTF-8 符号外,我得到一个“?”,就像编码设置不正确一样。 所以我认为问题是 gradle.

中的编码设置

到目前为止我尝试的是将此添加到 gradlew.bat:

set GRADLE_OPTS=-Dfile.encoding=utf-8

这对 build.gradle :

tasks.withType(JavaCompile) {
    options.encoding = 'UTF-8'
}

这对 gradle.Properties

systemProp.file.encoding=utf-8

就像本帖中提到的那样Show UTF-8 text properly in Gradle

None 似乎有帮助。有任何想法吗?我卡住了,正在努力寻找解决方案。

-Dfile.encoding=UTF-8 设置运行时 使用的 默认编码 当 运行 您编译的代码时,例如java -Dfile.encoding=UTF-8 -jar ...。不要将它与 Java 编译器用来读取 .java 文件的编码混淆:javac -encoding ....

为了避免在命令行上设置它,您也可以通过 System.setProperty("file.encoding", "UTF-8"); 以编程方式设置它。但最好在它使用的地方设置编码,例如而不是 BufferedWriter writer= Files.newBufferedWriter(path); use BufferedWriter writer= Files.newBufferedWriter(path, StandardCharsets.UTF_8);.