Gradle 对 属性 文件使用了错误的编码 (Latin-1)

Gradle uses wrong encoding (Latin-1) for property file

我尝试从带有变音符号的文件中读取属性,这是我的 build.gradle:

task utf8test << {

    Properties props = new Properties()
    def propFile = new File("my.property")
    if (propFile.canRead()) {
        props.load(new FileInputStream(propFile))
        for (Map.Entry property in props) {
                println property.value
        }
    }
}

我的 属性- 文件看起来像(UTF-8 编码):

challenge: ö

如果我执行任务:gradle utf8test 结果看起来像

:utf8test
ö

BUILD SUCCESSFUL

Total time: 0.877 secs

“ö”变为“ö”,便于理解。 “ö”作为十六进制是 c3b6,latin-1 中的 c3 是 Ã,b6 是 ¶,但这不是我所期望的。

问题: 如何配置 gradle 以 UTF-8 编码读取属性

更多信息:

如果我打印出 gradle 中的 propFiles 内容:

println propFile.text

我收到“ö”作为输出,所以文件被正确读入并且输出被我的shell正确编码。

Gradle-daemon 运行:-Dfile.encoding=UTF-8

用 -Dfile.encoding=UTF-8:gradle utf8test -Dfile.encoding=UTF-8 执行 gradle 没有帮助,bash 中的 export GRADLE_OPTS="-Dfile.encoding=UTF-8" 也没有帮助,添加 systemProp.file.encoding=utf-8 到 gradle.properties.

我在 gradle 中找不到 Properties-Class 的文档页面,是否有配置编码的选项?

到目前为止非常感谢!

这是预料之中的,与 gradle 没有太大关系。 documentation of java.util.Properties(与Gradle无关,是JDK的标准class)明确指定属性文件的标准编码为ISO-8859-1 .如果你是唯一一个读取该文件的人,并希望它包含 UTF-8,那么明确地将其读取为 UTF-8:

Properties props = new Properties()
def propFile = new File("my.property")
if (propFile.canRead()) {
    props.load(new InputStreamReader(new FileInputStream(propFile), StandardCharsets.UTF_8));
    for (Map.Entry property in props) {
            println property.value
    }
}