我得到了这个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吗?
答案 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
。