如何在Java中为Ant任务参数指定字符编码

时间:2010-06-14 12:16:12

标签: java ant character-encoding

我正在用Java编写ANT任务。

在我的build.xml中,我指定了参数,这些参数应该从我的java类中读取。当我在这些参数中使用特殊字符(如德语变音符号(Ö,Ä,Ü))时会出现问题。在我的java任务中,它们显示为?-characters(在eclipse中使用System.out.print)。

我的所有文件都编码为UTF-8。我的build.xml有相应的声明:

<?xml version="1.0" encoding="UTF-8" ?>

有关编写任务的详细信息:我是根据http://ant.apache.org/manual/develop.html(尤其是第5点嵌套元素)执行的。 我在我的任务中嵌套了元素,如:

<parameter name="test"   value="ÖÄÜtest"/>

和java方法:

public void addConfiguredParameter(Parameter prop) {
    System.out.println(prop.getValue());
    //prints ???test
}

读取参数值。

3 个答案:

答案 0 :(得分:2)

这里有几个转码操作:

  1. 编辑器将XML保存为UTF-8
    • 使用十六进制编辑器检查字符是否已正确编码
  2. Ant将UT从UTF-8解析为UTF-16字符串
    • 这里的错误非常不可能
  3. System.out PrintStream从UTF-16字符串转码为平台编码
    • 检查所使用的编码是否支持字符
  4. 将Eclipse控制台接收的字节解码为UTF-16字符串以供显示
    • 检查控制台使用的编码是否与PrintStream
    • 的编码匹配
  5. 编码为UTF-8,您可能希望XML文件中包含以下编码值:

    Grapheme  UTF-8 encoded bytes
    Ö         c3 96
    Ä         c3 84
    Ü         c3 9c
    

答案 1 :(得分:0)

您是否尝试使用以下参数启动java?

-Dfile.encoding=UTF-8

答案 2 :(得分:0)

问题以某种方式消失得无影无踪,可能已经通过将所有内容切换到utf-8来修复,但也许日食没有那么快反应。无论如何,我无法重现错误。

剩下的问题是,当我从build.xml中引用build.properties文件(使用提到的字符)时 - 我的java任务仍然没有得到正确的字符。但我可以通过使用\ u和字母的十六进制表示来避免这种情况 - 虽然这不是很方便!