这个XML /文本文件有什么问题?

时间:2013-10-29 01:13:54

标签: php xml macos simplexml osx-mountain-lion

我得到了这个UTF-16 XML文件。我将其转换为UTF-8(iconv -f UTF16 -t UTF8 'file-utf16.xml' > 'file-utf8.xml'),但结果似乎不是普通的文本文件。我正在使用OS X,当我在Sublime Text 2中打开这个转换后的文件时,会显示以下内容,并simplexml_load_file返回false

<?xml version="1.0" encoding="UTF-16" standalone="no"?>
<Item itemno="0000004" desc="" qtyavail="0" unitprice="0" salesprice="0" block="Yes" dnr="No"/>
<Item itemno="000001" desc="" qtyavail="0" unitprice="199.99" salesprice="199.99" block="No" dnr="No"/>
...

当我用textEdit打开它时,字符都很奇怪。它是汉字和下面其他一些东西的混合物。原始XML文件中绝对没有中文,只有罗马字母,数字和XML中使用的其他典型字符。

㼼浸敶獲潩㵮ㄢ〮•湥潣楤杮∽呕ⵆ㘱•瑳湡慤潬敮∽潮㼢ਾ䤼整瑩浥潮∽〰〰〰∴搠獥㵣∢焠祴癡楡㵬〢•湵瑩牰捩㵥〢•慳敬灳楲散∽∰戠潬正∽教≳搠牮∽潎⼢ਾ䤼整瑩浥潮∽〰〰㄰•敤捳∽•瑱慹慶汩∽∰甠楮灴楲散∽㤱⸹㤹•慳敬灳楲散∽㤱⸹㤹•汢捯㵫丢≯搠牮∽潎⼢ਾ

编码有问题吗?如果是这样,我如何将其转换为常规文本文件,以便通过simplexml_load_file阅读。如果没有,这里有什么问题?实际上,此simplexml_load_file会在此文件上返回false

更新: 刚刚意识到当我在XML文件中将字符串encoding="UTF-16"更改为encoding="UTF-8"时,一切正常。 iconv不足以将其转换为UTF-8吗?

2 个答案:

答案 0 :(得分:0)

尝试在浏览器中打开它。

Xml应该有一个根标签,以便形成良好。

另外,也许可以尝试将编码设置更改为UTF-8而无需BOM。

答案 1 :(得分:0)

对于您提供的XML - 尤其是在字符串开头的所谓XML Declaration

<?xml version="1.0" encoding="UTF-16" standalone="no"?>

只更改字符串的编码(就像使用iconv一样)只是故事的一部分。您还需要反映XML声明的结束(以及删除任何BOM - Byte Order Mark)。一个同时执行这两个操作的类 - 字符串的重新编码和处理XML声明 - 是XMLRecoder

但是在你的 UTF-16 情况下,这个应该根本不需要,因为SimpleXML支持UTF-16(如果你的iconv拥有它通常是情况)。

因此,当simplexml_load_file返回FALSE时,您需要找出具体的错误,因为返回值表示错误情况 - 无法解析XML。

为此,请在开发过程中将错误报告启用到最高级别。还记录错误并按照错误日志。相关的Q&amp; A是:

只是说,如果有帮助,您肯定可以使用XMLRecoder