ant loadfile任务不适用于xml文件

时间:2017-12-28 07:03:18

标签: xml utf-8 ant

我有以下info.xml文件,它使用捷克字符作为节点公司:

<?xml version="1.0" encoding="utf-8"?>
<Candidates>
    <name>Arvind Kumar</name>
    <company>ěčš</company>
</Candidates>

我有以下build.xml文件来读取info.xml文件并显示xml文件的内容:

<?xml version="1.0" encoding="utf-8"?>
<project name="Check" default="">
    <xmlproperty file="info.xml" collapseAttributes="true"/>
    <echo file="output.txt" append="false">${Candidates.company}</echo>
</project>

在Windows 7上运行ant后,我在output.txt中得到以下输出,显示'company'的值不正确:

<?xml version="1.0" encoding="utf-8"?>
<Candidates>
    <name>Arvind Kumar</name>
    <company>??š</company>
</Candidates>

我尝试使用另一个build.xml来使用带有编码的ant loadfile任务,但这也没有帮助:

<?xml version="1.0" encoding="utf-8"?>
<project name="Check" default="">
    <loadfile encoding="utf-8" srcFile="info.xml" property="encoded_file"/>
    <echo file="output.txt" append="false">${encoded_file}</echo>
</project>

请让我知道如何使用ant任务,它可以正确读取和显示xml文件中的捷克字符。

3 个答案:

答案 0 :(得分:1)

蚂蚁没有错。字符的显示方式取决于用于查看信息的程序。例如如果您在Windows命令提示符下显示UTF-8字符,则它将无法正确显示,因为它没有UTF-8支持。 (可能有设置要更改它,但默认情况下它不会)。如果要将其放在文件中,则用于显示文件的查看器应支持UTF-8编码。

如果你在支持UTF-8的控制台上做同样的事情,例如kconsole(KDE的一部分)在Linux上运行Bash,它有UTF-8,然后正确显示文本。

答案 1 :(得分:0)

我认为有两种可能性:输入中的字符编码错误,或者在查看输出时显示错误(如@Jignesh所示)。

要检查输入中的字符是否正确,请尝试使用Saxon等XSLT 2.0处理器并运行XPath 2.0表达式

string-to-codepoints(//city)

这将为您提供与城市名称中的字符对应的Unicode代码点的十进制值 - 例如ü应该是252.如果它错了,那么输入XML的实际编码与声明的编码不匹配,所以角色被误读了。如果它是正确的,那么Ant任务/转换可能正常工作并且问题在下游,您需要更仔细地查看输出文件的处理/显示方式。

答案 2 :(得分:0)

加载时您正在使用编码,但在阅读时您没有使用编码。 更改以下行:

public boolean allEvenOrAllOdd(int[] array) {
    boolean hasOdd = false;
    boolean hasEven = false;
    for (int i = 0; i<array.length; i++) {
        if (array[i] % 2 == 0) {
            hasEven = true;
            if (hasOdd) { // has both odds and evens
                return false;
            }
        } else {
            hasOdd = true;
            if (hasEven) { // has both odds and evens
                return false;
            }
        }
    }
    return true; // either all elements are odd or all elements are even
}

TO:

<echo file="output.txt" append="false">${encoded_file}</echo>

这应该可以解决问题。

您的第一个XML文件应该是:

<echo encoding=:UTF-8" file="output.txt" append="false">${encoded_file}
 </echo>.