我有以下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文件中的捷克字符。
答案 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>.