Reputation: 5712
I try to read properties from a file with umlauts, this is my 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
}
}
}
My property-file looks like (UTF-8 encoded):
challenge: ö
If i execute the task with: gradle utf8test
The result looks like
:utf8test
ö
BUILD SUCCESSFUL
Total time: 0.877 secs
"ö" changes to "ö", which is easy to understand. "ö" as hexadecimal is c3b6 and c3 in latin-1 is à and b6 is ¶, but it is not what i expected.
Question: How can i configure gradle to read in properties as UTF-8 encoded
More Informations:
If i print out the propFiles content in gradle with:
println propFile.text
i receive "ö" as output, so the file is read in correctly and the output is encoded correctly by my shell.
Gradle-daemon runs with: -Dfile.encoding=UTF-8
Executing gradle with -Dfile.encoding=UTF-8:gradle utf8test -Dfile.encoding=UTF-8
does not help, nor does export GRADLE_OPTS="-Dfile.encoding=UTF-8"
in bash, nor does adding systemProp.file.encoding=utf-8
to gradle.properties.
I was not able to find the documentation page for the Properties-Class in gradle, is there any option to configure the encoding?
Many thanks so far!
Upvotes: 2
Views: 1984
Reputation: 692023
That's expected, and doesn't have much to do with gradle. The documentation of java.util.Properties (which has nothing to do with Gradle but is a standard class of the JDK) explicitely specifies that the standard encoding of properties file is ISO-8859-1. If you're the only one to read the file, and want it to contain UTF-8, then explicitely read it as 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
}
}
Upvotes: 5