[英]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.