2010-09-16 45 views
1

我讀嘗試如下從ByteArray中加載XML:軟硬度:關於「形成良好的」標記,即使XML格式良好的錯誤消息

var xmlString:String = myByteArray.readUTFBytes(numBytes); 
var myXML:XML = new XML(xmlString); 

當我這樣做,我收到了下面就以XML構造運行時錯誤,當我在Flash Player 9運行:

類型錯誤:錯誤#1088:根元素下列文件中的標記必須得到很好的形成。

Flash Player 10中不會出現此錯誤消息。我可以使用調試器來驗證XML是否格式良好。 XML採用UTF-8格式。

回答

1

對於我來說,解決這個特殊問題的方法是在文件的最開始有一個不必要的Byte Order Mark,我不得不刪除它。當用十六進制編輯器檢查的文件,我看到下面的文件中的引導字節:

EF BB BF

Flash播放器9運行時顯然與此字節順序標記在UTF-8的文件,一個問題,是沒有必要的,因爲在UTF-8中沒有字節順序,與UTF-16和UTF-32相反。 Flash Player 10在這個領先的字節順序標記中沒有問題。

這就解釋了,爲什麼this other blog entry文件,下面的解決方案爲他們工作:

xmlString = xmlString.substr(1); 

這個特定的解決方案也不太爲我工作,因爲它轉移了運行時錯誤到Flash Player 10的用戶,而不是Flash Player 9用戶。由於我們已經控制了XML輸入,所以我們可以簡單地修改它,但是如果XML來自我們無法控制的源,那麼我想我們可以測試ByteArray的領先BOM,並跳過它,如上所示。

For me the problem was XML saved in UTF with BOM.

此外,this other blog entry提供:

一些博客文章中確認BOM是問題,比如這entry,其中一個評論者指出,他的解決方案相同的1088運行時錯誤是主動服務在Java中發生同樣問題的更多確認:

When dealing with a UTF-8 encoded RSS feed, this three-byte pattern (0xEF 0xBB 0xBF) in >the prolog can cause all sorts of interesting XML parsing problems

+0

如果在xml的開頭添加一個'<?xml version =「1.0」encoding =「UTF-8」?>'? – Amarghosh 2010-09-16 03:48:43

+0

XML聲明是XML文件中的第一件事(在BOM之後)。 – 2010-09-16 04:40:53