2013-10-29 58 views
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 /文本文件有什麼問題?

<?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

這些文件似乎是一個'UTF-8'編碼文件。 –

+0

如果您還沒有安裝[EncodingHelper](https://github.com/SublimeText/EncodingHelper) – PositiveLogic

+0

我已更新我的文章。請看一下。手動更改文件內的字符串可修復所有內容。 – musicliftsme

回答

0

嘗試在瀏覽器中打開它。

Xml應該有一個根標籤,以便形成良好。

此外,也許嘗試更改您的編碼設置爲UTF-8無BOM。

0

對於您所提供的XML - 在您的字符串的開頭特別是所謂的XML Declaration

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

只有改變字符串的編碼(比如你iconv做)只是一部分故事。您還需要用XML聲明反映內容(並刪除任何BOM - Byte Order Mark)。一個既能對字符串進行重新編碼又能處理XML聲明的類是XMLRecoder

UTF-16情況

然而,這應該不爲UTF-16是由SimpleXML的支持是必要的,在所有的(如果你的iconv是它這是正常的情況下)。

所以,當simplexml_load_file返回FALSE時,您需要了解具體遇到哪些錯誤,因爲返回值表示錯誤條件 - XML不能被解析。

爲此,請在開發時將錯誤報告設置爲最高級別。還記錄錯誤並按照錯誤日誌。一個相關的Q & A是:

只是說,你肯定可以使用XMLRecoder是否有幫助。

+0

因此,如果我不用'iconv'替換字符串'UTF-16',看起來'simplexml_load_file'將與原始文件一起工作。這是安全的,還是應該用'iconv'轉換它並替換文件中的字符串?如果我嘗試按原樣加載文件,該文件將不會加載並返回false。不幸的是,我無法更改錯誤報告設置。 – musicliftsme

+0

那麼,你的評論可能是一個數據傳輸問題的跡象,所以是的,你需要修復XML聲明,以便它匹配文檔的編碼。在編寫文檔時,實際上是UTF-8,您還可以刪除XML聲明,因爲這是默認編碼。 – hakre

+0

嗯,實際上字符串替換文件只適用於我複製並粘貼到另一個文件中的前幾行的'simplexml'。總的來說,即使在頭文件中包含'iconv'和'UTF-8',該文件也無法加載。這令人沮喪。 – musicliftsme