2010-09-16 47 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