如何在ant中加载非ascii属性文件
假设我有一个属性文件test.properties,它使用utf-8保存如何在ant中加载非ascii属性文件,ant,Ant,假设我有一个属性文件test.properties,它使用utf-8保存 testOne=测试 我正在使用以下ant脚本加载它并将其回显到另一个文件: <loadproperties srcFile="test.properties" encoding="utf-8"/> <echo encoding="utf-8" file="text.txt">${testOne}</echo> 我的脚本出了什么问题?我找到了解决办法,但我仍然不明白为什么Org
testOne=测试
我正在使用以下ant脚本加载它并将其回显到另一个文件:
<loadproperties srcFile="test.properties" encoding="utf-8"/>
<echo encoding="utf-8" file="text.txt">${testOne}</echo>
我的脚本出了什么问题?我找到了解决办法,但我仍然不明白为什么OrganOne不起作用:
<native2ascii src="." dest=".">
<mapper type="glob" from="test.properties" to="testASCII.properties"/>
</native2ascii>
<loadproperties srcFile="testASCII.properties"/>
然后,回声按预期工作
我不知道为什么loadproperties中的编码不起作用
有人能解释一下吗?我找到了一个解决办法,但我仍然不明白为什么OrganOne不起作用:
<native2ascii src="." dest=".">
<mapper type="glob" from="test.properties" to="testASCII.properties"/>
</native2ascii>
<loadproperties srcFile="testASCII.properties"/>
然后,回声按预期工作
我不知道为什么loadproperties中的编码不起作用
有人能解释一下吗?试着这样做:
<loadproperties srcfile="non_ascii_property.properties">
<filterchain>
<escapeunicode/>
</filterchain>
</loadproperties>
显然,InputStreamReader使用ISO Latin-1字符集,这会杀死非ascii字符。我遇到了同样的问题,是阿拉伯语。这样试试:
<loadproperties srcfile="non_ascii_property.properties">
<filterchain>
<escapeunicode/>
</filterchain>
</loadproperties>
显然,InputStreamReader使用ISO Latin-1字符集,这会杀死非ascii字符。我遇到了同一期的阿拉伯文版。您使用的是什么编辑器,您使用的是什么平台 生成的属性文件实际上可能很好,但用于检查它的编辑器可能无法查看它。例如,在我的Mac上,
VIM
命令行编辑器可以查看它(这让我感到惊讶),但在Eclipse中,它看起来是这样的:
testOne=������
如果您使用的是Unix/Linux/Mac,请尝试使用转储生成的文件,并检查实际的十六进制代码,看看它应该是什么
例如,我复制了您的属性文件,并在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表示形式。(或者,至少我这么认为。它正确地显示在角色查看器Mac OS X面板中)。您使用的是什么编辑器以及您使用的是什么平台
生成的属性文件实际上可能很好,但用于检查它的编辑器可能无法查看它。例如,在我的Mac上,VIM
命令行编辑器可以查看它(这让我感到惊讶),但在Eclipse中,它看起来是这样的:
testOne=������
如果您使用的是Unix/Linux/Mac,请尝试使用转储生成的文件,并检查实际的十六进制代码,看看它应该是什么
例如,我复制了您的属性文件,并在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表示形式。(或者,至少我这么认为。它正确地显示在字符查看器Mac OS X面板中)。David W.的评论指出了正确的答案:
Java属性文件必须用ISO-8859-1
编码:
但是像\u6d4b
这样的Unicode转义序列可以/必须用于编码其中的Unicode字符
工具/ANT目标,如
,从本机维护的文件生成ascii编码的文件,可以在这里提供帮助David W.的评论指出了正确的答案:
Java属性文件必须用ISO-8859-1
编码:
但是像\u6d4b
这样的Unicode转义序列可以/必须用于编码其中的Unicode字符
工具/ANT目标,如
,从本机维护的文件生成ascii编码的文件,可以在这里提供帮助同时使用“编码”和“escapeunicode”。很好
<loadproperties srcfile="${your.properties.file}" encoding="UTF-8">
<filterchain>
<escapeunicode />
</filterchain>
</loadproperties>
同时使用“编码”和“转义码”。很好
<loadproperties srcfile="${your.properties.file}" encoding="UTF-8">
<filterchain>
<escapeunicode />
</filterchain>
</loadproperties>
您可以编写自己的任务,从操作系统的默认java字符编码读取属性(我的是utf-8),而不是将属性文件转换为不可读的unicode转义ASCII文件(由只读写英语的人设计)。下面介绍如何将Property.java从Ant的源代码复制和修改到您自己的包(例如org.my.Ant)中。我使用了Ant1.10.1
从此处以您选择的格式下载Ant的源代码:
将src/main/org/apache/tools/ant/taskdefs/Property.java复制到org/my/ant/Property.java中您自己的项目(例如新的java项目)
替换:
package org.apache.tools.ant.taskdefs;
props.load(is);
与:
修复包更改所需的任何导入。我只需要补充一点:
import org.apache.tools.ant.taskdefs.Execute;
在方法中:
loadProperties(Properties props, InputStream is, boolean isXml)
替换:
package org.apache.tools.ant.taskdefs;
props.load(is);
与:
在项目的resources文件夹(可能与源文件夹相同)中,添加文件org/my/ant/antlib.xml,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<antlib>
<taskdef name="property" classname="org.my.ant.Property"/>
</antlib>
您可以编写自己的任务,从操作系统的默认java字符编码读取属性(我的是utf-8),而不是将属性文件转换为不可读的unicode转义ASCII文件(由只读写英语的人设计)。下面介绍如何将Property.java从Ant的源代码复制和修改到您自己的包(例如org.my.Ant)中。我使用了Ant1.10.1
从此处以您选择的格式下载Ant的源代码:
将src/main/org/apache/tools/ant/taskdefs/Property.java复制到org/my/ant/Property.java中您自己的项目(例如新的java项目)
替换:
package org.apache.tools.ant.taskdefs;
props.load(is);
与:
修复包更改所需的任何导入。我只需要补充一点:
import org.apache.tools.ant.taskdefs.Execute;
在方法中:
loadProperties(Properties props, InputStream is, boolean isXml)
替换:
package org.apache.tools.ant.taskdefs;
props.load(is);
与:
在项目的resources文件夹(可能与源文件夹相同)中,添加文件org/my/ant/antlib.xml,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<antlib>
<taskdef name="property" classname="org.my.ant.Property"/>
</antlib>
您使用的是什么编辑器?您使用的是什么平台?很可能您的编辑器没有使用UTF-8。您使用的是什么编辑器以及您使用的是什么平台?很可能您的编辑器没有使用UTF-8。我认为这是Ant中的一个bug。s