我正在尝试从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。
答案 0 :(得分:1)
对我来说这个特殊问题的解决方案是在文件的最开头有一个不必要的Byte Order Mark,我必须删除它。在使用十六进制编辑器检查文件时,我看到以下内容作为文件中的前导字节:
EF BB BF
Flash Player 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,并跳过它,如上所示。 / p>
一些博客条目有助于确认BOM是问题,例如此entry,其中评论者声明他对同一1088运行时错误的解决方案是:
对我来说,问题是以带有BOM的UTF保存的XML。
此外,this other blog entry提供了对Java中出现的同一问题的更多确认:
在处理UTF-8编码的RSS提要时,> prolog中的这个三字节模式(0xEF 0xBB 0xBF)会导致各种有趣的XML解析问题