如何在ant中加载非ascii的属性文件

时间:2011-10-11 02:00:30

标签: ant

假设我有一个属性文件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文件时,我看到:

 ??

我的剧本出了什么问题?

6 个答案:

答案 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: ΑΒΓ