在strings.xml中引用gradle.properties中的日语/中文字符串会导致未知行为

时间:2017-06-19 13:48:14

标签: android string gradle localization

我通过以下方式引用string.xml中的gradle变量:

gradle.properties

APP_NAME_JAPANESE="日本語"

的build.gradle

resValue 'string', 'APP_NAME_JAPANESE', APP_NAME_JAPANESE

的strings.xml

<string name="app_name">@string/APP_NAME_JAPANESE</string>

生成的文件generated.xml具有以下字符串

<string name="APP_NAME_JA" translatable="false">"ã¢ãã¿ã¼ãã«ã¹"</string>

我们可以看到字符是不可读的。

所有文件都是UTF-8编码。

如果不是将变量放在gradle.properties中,而是直接将它放在build.gradle resValue 'string', 'APP_NAME_JAPANESE', "日本語"上,一切正常。

这可能是gradle系统中的错误吗?

2 个答案:

答案 0 :(得分:0)

根据定义,Java properties文件是不是 UTF-8编码,除非您将它们显式解析为UTF-8文件。

默认情况下,它们是ISO-8859-1编码的unicode转义符,用于超出该范围的字符。

修复您的属性文件,一切都会像魅力一样。

当您使用Android时,我猜您使用的是Android Studio,它只是一个专门的IntelliJ IDEA。在那里,您可以使用透明的native-to-ascii转义将属性文件的编码设置更改为ISO-8859-1。这允许您在编辑器中查看UTF-8字形,但文件将根据需要自动保存,并使用unicode转义。或者,您可以在开始实际构建之前使用UTF-8编码属性文件上的native2ascii工具进行该转换。但我真的建议使用适当的编码,大多数可以处理属性文件的工具都可以使用。

答案 1 :(得分:0)

我尝试过更改编码,但仍然会出现同样的问题。

最后我决定以base64格式设置字符串,然后解析build.gradle中的字符串,就像这样

resValue 'string', 'APP_NAME_JA', new String(APP_NAME_JA.decodeBase64(), "UTF-8")