[英]Flex: Error message about “well-formed” markup, even though XML is well-formed
我正在讀取嘗試從ByteArray加載XML的信息,如下所示:
var xmlString:String = myByteArray.readUTFBytes(numBytes);
var myXML:XML = new XML(xmlString);
這樣做時,在Flash Player 9中運行時,在XML構造函數上收到以下運行時錯誤:
TypeError:錯誤#1088:根元素后的文檔中的標記必須格式正確。
在Flash Player 10中不會發生此錯誤消息。我可以使用調試器來驗證XML的格式是否正確。 XML使用UTF-8。
對我來說,這個特殊問題的解決方案是在文件的開頭有一個不必要的字節順序標記 ,我必須將其刪除。 使用十六進制編輯器檢查文件后,我看到以下內容作為文件中的前導字節:
EF BB高爐
Flash Player 9運行時顯然在UTF-8文件上具有此字節順序標記問題,這是不必要的,因為與UTF-16和UTF-32相比,UTF-8中沒有字節順序。 Flash Player 10對此前導字節順序標記沒有問題。
這就說明了為什么其他博客條目記錄了以下解決方案適用於他們的原因:
xmlString = xmlString.substr(1);
該特定解決方案對我而言不太有效,因為它將運行時錯誤轉移到Flash Player 10用戶,而不是Flash Player 9用戶。 由於我們可以控制XML輸入,因此我們可以簡單地對其進行修改,但是如果XML來自我們無法控制的源,我想我們可以測試ByteArray作為領先的BOM並跳過它,如上所示。
幾個Blog條目有助於確認BOM是問題所在,例如this 條目 ,其中評論者指出他對同一1088運行時錯誤的解決方案是:
對我來說,問題是XML用BOM保存在UTF中。
此外, 此其他博客條目還提供了更多有關Java中發生的相同問題的確認:
在處理UTF-8編碼的RSS提要時,>序言中的此三字節模式(0xEF 0xBB 0xBF)可能導致各種有趣的XML解析問題
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.