如何让Ant <input />任务正确输出åäö(及类似字符)?

时间:2012-10-02 08:48:21

标签: ant character-encoding

我的第一个问题。请耐心等待我!

我有一个Ant任务需要在继续之前从用户那里获得一些输入。我使用Input task来实现这一目标。输入消息将包含瑞典字符(例如å,ä和ö),但我无法让Ant正确输出消息。我正在使用运行Windows 7 Pro English的计算机上的命令行测试它(但显然使用瑞典语键盘)。例如:

<input message="åäö"/>

将输出:

[input] Õõ÷

build.xml以UTF-8格式保存。如果我在命令行上执行'chcp',我会得到“Active code page:850”。

执行echo时可以看到相同的结果:

<echo message="åäö"/>

将输出:

[echo] Õõ÷

但是在我可以做的echo任务的情况下:

<echo encoding="850" message=åäö">

获得预期的输出:

[echo] åäö

然而,输入任务没有编码属性,我更喜欢根本不需要定义编码,特别是不能在每个任务级别上(因为我无法确定在哪台机器上) Ant脚本将从中运行。

PS我收到的输入有其他问题,如果它包含åäö并且我将输入设置为稍后在过滤器复制任务中使用的属性,但我想这是另一个问题

1 个答案:

答案 0 :(得分:1)

我可以在波兰语Windows上观察到这个问题。

<script language="javascript">
  java.lang.System.out.println("default charset: "
  + java.nio.charset.Charset.defaultCharset());
</script>

将默认字符集报告为“windows-1250”,而控制台则以“iso-8859-2”运行(我猜是这样)。

看起来<input>任务使用默认字符集,认为它与控制台输入匹配。如果没有,我设法以这种方式覆盖编码

set ANT_OPTS=-Dfile.encoding=iso-8859-2
ant

在你的情况下,我会尝试强制850,因为看起来JRE默认为其他东西。

This question帮助我找到了属性名称。

ant运行起来也很重要。如果我从我的ide jedit控制台插件运行它,我不需要覆盖编码,因为我将其配置为在windows-1250中运行。所以它似乎是另一个解决方法,使用IDE