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

我正在用Java编写ANT任务。

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

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

 

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

  

和一个java方法:

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

读取参数值。

这里有几个转码操作:

  1. 编辑器将XML保存为UTF-8
    • 使用hex编辑器检查字符是否已正确编码
  2. Ant从UTF-8到UTF-16字符串解析XML
    • 这里的错误是不太可能的
  3. System.out PrintStream从UTF-16字符串转码为平台编码
    • 检查使用的编码是否支持字符
  4. 将Eclipse控制台接收的字节解码为UTF-16字符串以供显示
    • 检查控制台使用的编码是否与PrintStream的编码匹配

编码为UTF-8,您可以期望XML文件中包含以下编码值:

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

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

 -Dfile.encoding=UTF-8 

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

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