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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ant loadfile任务不适用于xml文件中给出的捷克字符相关的知识,希望对你有一定的参考价值。

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

答案

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

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

另一答案

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

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

string-to-codepoints(//city)

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

另一答案

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

<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>

以上是关于ant loadfile任务不适用于xml文件中给出的捷克字符的主要内容,如果未能解决你的问题,请参考以下文章

Plsql 语句不适用于 ANT

如何从ant中的txt文件导入变量值?

JMeter+Jenkins+Ant持续化安装配置

ant过滤 - 如果未设置属性,则失败

build.xml是啥

Apache Ant学习总结:Ant自动化脚本入门以及一些常用命令介绍