ant loadfile任务不适用于xml文件中给出的捷克字符

问题描述 投票:0回答:3

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

xml utf-8 ant
3个回答
1
投票

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

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


0
投票

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

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

string-to-codepoints(//city)

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


0
投票

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

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

至:

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

这应该可以解决问题。

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

<?XML version="1.0" encoding="utf-8"?>
<project name="Check" default="">
 <xmlproperty file="test.xml" collapseAttributes="true"/>
 <echo encoding="utf-8" file="output.xml" 
        append="false">${Candidates.company}</echo>
</project>
© www.soinside.com 2019 - 2024. All rights reserved.