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

Mur*_*mel 2 encoding utf-8 latin1 gradle

我尝试从带有变音符号的文件中读取属性,这是我的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
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

challenge: ö
Run Code Online (Sandbox Code Playgroud)

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

:utf8test
ö

BUILD SUCCESSFUL

Total time: 0.877 secs
Run Code Online (Sandbox Code Playgroud)

"ö"变为"",这很容易理解.十六进制的"ö"是c3b6,latin-1中的c3是Ã而b6是,但它不是我所期望的.

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

更多信息:

如果我用gradle打印出propFiles内容:

println propFile.text
Run Code Online (Sandbox Code Playgroud)

我收到"ö"作为输出,因此正确读入文件,我的shell正确编码输出.

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

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

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

非常感谢到目前为止!

JB *_*zet 5

这是预期的,与gradle没什么关系.java.util.Properties(与Gradle无关,但是是JDK的标准类)的文档明确指出属性文件的标准编码是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
    }
}
Run Code Online (Sandbox Code Playgroud)