我尝试从带有变音符号的文件中读取属性,这是我的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:gradle utf8test -Dfile.encoding=UTF-8
没有帮助,bash中也没有export GRADLE_OPTS="-Dfile.encoding=UTF-8"
,也没有将systemProp.file.encoding=utf-8
添加到gradle.properties。
我无法在gradle中找到Properties-Class的文档页面,是否有配置编码的选项?
非常感谢到目前为止!
答案 0 :(得分:5)
这是预期的,与gradle没什么关系。 documentation of java.util.Properties(与Gradle无关,但是是JDK的标准类)明确指定属性文件的标准编码是ISO-8859-1。如果您是唯一一个读取该文件并希望它包含UTF-8的人,那么请明确地将其读作UTF-8:
module Dict
def Dict.new(num_buckets=256)
# Initializes a Dict with the given number of buckets.
aDict = []
(0...num_buckets).each do |i|
aDict.push([])
end
return aDict
end