如何使用iconv for xsltproc将nonUTF-8字符转换为UTF-8字符

时间:2015-07-20 09:47:07

标签: xslt unicode utf-8 iconv

我正在尝试使用xsltproc从xml文件中获取数据但是当我执行xsltproc时,我得到一个解析器错误列表,显示我:

  

new_news.xml:388407:解析器错误:PCDATA无效Char值26

     

new_news.xml:418521:解析器错误:PCDATA无效字符值26

     

new_news.xml:1490882:解析器错误:PCDATA无效字符值27   ultan'ın

错误列表中的数字显示我的xml文件的行号,其中发生错误,我看到有一些非UTF8字符,如ESC,SUB等。(。xml文件具有UTF-8标记在开头。)因为在这种情况下,我需要删除(或替换)那些非UTF8字符。要做到这一点:

我使用了iconv命令:

  

iconv -c -t UTF-8< new.xml> new_news.xml

然后使用diff命令查看差异:

  

diff new.xml new_news.xml

但他们之间没有区别。因此,在给xsltproc命令提供new_news.xml的情况下,我得到相同的错误。

你能帮我解决一下吗?我究竟做错了什么? 顺便说一句,我正在使用OsX终端。我不知道iconv命令是否与sed和awk命令有所区别。

最好的问候

1 个答案:

答案 0 :(得分:1)

你的问题不是UTF-8,而是XML。非打印字符(如ESC或SUB)为not allowed in XML。如果您的文件包含它们,那么它不是XML文档。

在将文档解析为XML并由XSLT处理器处理之前,您需要删除有问题的字符或将其更改为其他字符。更改文档的编码将无法完成任何操作。