如何使用Gradle自动转义Java属性文件中的Unicode字符?

f0brbegy  于 2023-06-23  发布在  Java
关注(0)|答案(2)|浏览(155)

我正在翻译一个Java应用程序,使用一个带有各种*.properties文件的ResourceBundle。现在,我想有一个Gradle任务,或者想修改一个任务,通过将其替换为 ASCII 表示来自动转义任何 unicode 字符,就像Java的native2ascii工具一样。
这就是我到目前为止对构建文件所做的,但是输出仍然是未转义的

import org.apache.tools.ant.filters.EscapeUnicode

tasks.withType(ProcessResources) {
    filesMatching('**/*.properties') {
        println "\t-> ${it}"
        filter EscapeUnicode
    }
}
  • 任何帮助都值得感谢 *
polkgigr

polkgigr1#

您可以通过为属性文件提供额外的复制规范来实现这一点,方法如下:

import org.apache.tools.ant.filters.EscapeUnicode
tasks.withType(ProcessResources).each { task ->
    task.from(task.getSource()) {
        include '**/*.properties'
        filter(EscapeUnicode)
    }
}
jutyujz0

jutyujz02#

The solution given by stanislav导致了重复的文件冲突(我认为这从相同的源文件创建了一个新的“管道”,只包括“属性”文件,过滤,并写入与原始任务相同的目录,但任务的原始“管道”保持不变)。
对于任何希望在不重复的情况下做到这一点的人,这里是我的解决方案。它还使用了Native2AsciiFilter而不是EscapeUnicode,这应该会给予与native2ascii maven工具更相似的结果。这个过滤器作用于行而不是文件(它不扩展java.io.FilterReader),所以我们不能直接将它用作filter的参数。

import org.apache.tools.ant.filters.Native2AsciiFilter
tasks.withType(ProcessResources).each { task ->
    def nativeToAscii = new Native2AsciiFilter()
    task.filesMatching('**/*.properties') {
        filter { line -> nativeToAscii.filter(line) }
    }
}

相关问题