假设我有一个属性文件test.properties,使用utf-8
保存 testOne=测试
我使用以下ant脚本加载它并将其回显到另一个文件:
<loadproperties srcFile="test.properties" encoding="utf-8"/>
<echo encoding="utf-8" file="text.txt">${testOne}</echo>
当我使用“utf-8”编码打开生成的text.txt文件时,我看到:
??
我的剧本出了什么问题?
答案 0 :(得分:1)
一起使用“encoding”和“escapeunicode”。它工作正常。
<loadproperties srcfile="${your.properties.file}" encoding="UTF-8">
<filterchain>
<escapeunicode />
</filterchain>
</loadproperties>
答案 1 :(得分:0)
我找到了一个解决方法,但我仍然不明白为什么组织工作不起作用:
<native2ascii src="." dest=".">
<mapper type="glob" from="test.properties" to="testASCII.properties"/>
</native2ascii>
<loadproperties srcFile="testASCII.properties"/>
然后回声按预期工作。
我不知道为什么loadproperties中的编码不起作用。
任何人都可以解释一下吗?
答案 2 :(得分:0)
以这种方式尝试:
<loadproperties srcfile="non_ascii_property.properties">
<filterchain>
<escapeunicode/>
</filterchain>
</loadproperties>
显然,使用ISO Latin-1字符集的InputStreamReader会杀死你的非ascii字符。我遇到了与阿拉伯语相同的问题。
答案 3 :(得分:0)
您使用的是什么编辑器,您使用的是什么平台?
您生成的属性文件可能实际上很好,但您用来检查它的编辑器可能无法查看它。例如,在我的Mac上,VIM
命令行编辑器可以查看它(这让我感到惊讶),但在Eclipse中,它看起来像这样:
testOne=������
如果您使用的是Unix / Linux / Mac,请尝试使用od转储生成的文件,并检查实际的十六进制代码以查看它应该是什么。
例如,我复制了您的属性文件,并在Mac上运行od
:
$ od -t x1 -t c test.property
0000000 74 65 73 74 4f 6e 65 3d e6 b5 8b e8 af 95 0a
t e s t O n e = 测 ** ** 试 ** ** \n
在这里,我可以看到测
的代码是36 b5 8b
,试
的代码是e8 af 95
,这是这两个字符的正确UTF-8表示形式。 (或者,我至少这么认为。它在Character Viewer Mac OS X面板中正确显示。)
答案 4 :(得分:0)
David W :
在本评论中指出了正确的答案how to load a properties file with non-ascii in ant
Java属性文件必须以ISO-8859-1
进行编码:
http://docs.oracle.com/javase/7/docs/api/java/util/Properties.html
但 \u6d4b
之类的Unicode转义序列可以/必须用于编码其中的unicode字符。
工具/ ANT-Targets如<native2ascii>
,从本机维护的文件中生成ascii编码的文件,可以在这里提供帮助。
答案 5 :(得分:0)
您可以编写自己的任务,从您的操作系统的默认java字符编码中读取属性(我的是utf-8),而不是将属性文件转换为不可读的unicode-escaped ASCII文件(由读写的人设计)只能说英语)。以下是通过将Ant的源代码中的Property.java复制并修改为您自己的包(例如org.my.ant)来实现的。我使用了Ant 1.10.1。
从此处以您选择的格式下载Ant的源代码: http://ant.apache.org/srcdownload.cgi
将src / main / org / apache / tools / ant / taskdefs / Property.java复制到您自己的项目(例如新的Java项目),在org / my / ant / Property.java中)
取代:
package org.apache.tools.ant.taskdefs;
使用:
package org.my.ant;
修复程序包更改所需的任何导入。我只需要添加:
import org.apache.tools.ant.taskdefs.Execute;
在方法中:
loadProperties(Properties props, InputStream is, boolean isXml)
取代:
props.load(is);
使用:
props.load(new InputStreamReader(is));
在项目的资源文件夹中(可能与源文件夹相同),添加文件org / my / ant / antlib.xml,内容为:
<?xml version="1.0" encoding="UTF-8"?>
<antlib>
<taskdef name="property" classname="org.my.ant.Property"/>
</antlib>
编译此项目(Property.java + antlib.xml)。
将生成的jar放入Ant的类路径中,如下所述: http://ant.apache.org/manual/using.html#external-tasks
然后在build.xml文件中使用它,如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<project name="example"
xmlns:my="antlib:org.my.ant"
default="print"
>
<my:property file="greek.properties" prefix="example" />
<target name="print">
<echo message="${example.a}"/>
</target>
</project>
文件greek.properties包含:
a: ΑΒΓ