0

我得到了这个 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"。将其转换为 UTF-8 还不够吗encoding="UTF-8"iconv

4

2 回答 2

0

尝试在浏览器中打开它。

Xml 应该有一个根标签才能形成良好的格式。

另外,也许尝试将您的编码设置更改为 UTF-8 WITHOUT BOM。

于 2013-10-29T01:28:39.333 回答
0

对于您提供的 XML - 特别是在字符串开头使用所谓的XML 声明:

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

仅更改字符串的编码(就像您对 所做的那样iconv)只是故事的一部分。您还需要反映 XML 声明的内容(并删除任何BOM - 字节顺序标记)。一个同时进行字符串重新编码和处理 XML 声明的类是XMLRecoder.

但是,在您的UTF-16情况下,这根本不是必需的,因为 SimpleXML 支持 UTF-16(如果您的 iconv 有它,这通常是这种情况)。

因此,您需要找出在simplexml_load_file返回时具体会出现哪些错误,FALSE因为该返回值表示错误条件 - 无法解析 XML。

为此,请在开发过程中启用最高级别的错误报告。还要记录错误并遵循错误日志。一个相关的问答是:

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

于 2013-10-29T16:40:57.600 回答