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

时间:2015-06-20 16:44:39

标签: encoding utf-8 gradle latin1

我尝试从带有变音符号的文件中读取属性,这是我的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的文档页面,是否有配置编码的选项?

非常感谢到目前为止!

1 个答案:

答案 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