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文件中给出的捷克字符的主要内容,如果未能解决你的问题,请参考以下文章