代码之家  ›  专栏  ›  技术社区  ›  Raul Agrait

flex:关于“格式良好”标记的错误消息,即使XML格式良好

  •  1
  • Raul Agrait  · 技术社区  · 14 年前

    我正在阅读尝试从字节数组加载XML,如下所示:

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

    当我这样做时,当我在FlashPlayer9中运行时,在XML构造函数上收到以下运行时错误:

    类型错误:错误1088:根元素后面的文档中的标记必须格式正确。

    此错误消息不会出现在Flash Player 10中。我可以使用调试器来验证XML的格式是否正确。XML是UTF-8格式的。

    1 回复  |  直到 14 年前
        1
  •  1
  •   Raul Agrait    14 年前

    对我来说,这个问题的解决办法是没有必要 Byte Order Mark 在文件的开头,我必须删除它。在使用十六进制编辑器检查文件时,我发现文件中的前导字节如下:

    英孚BB BF

    flash player 9运行时显然在utf-8文件上有一个字节顺序标记的问题,这是不必要的,因为在utf-8中没有字节顺序,而不是utf-16和utf-32。flash player 10与这个前导字节顺序标记没有问题。

    这就解释了为什么 this other blog entry 记录以下解决方案对他们有效:

    xmlString = xmlString.substr(1);
    

    这个特定的解决方案对我来说不太管用,因为它将运行时错误转移到了FlashPlayer10用户,而不是FlashPlayer9用户。因为我们控制了XML输入,所以我们可以简单地修改它,但是如果XML来自一个我们不控制的源,我想我们可以测试前面的BOM的bytearray,并跳过它,如上图所示。

    一些博客条目有助于确认BOM是问题所在,例如 entry ,其中一个注释者声明,他对相同1088运行时错误的解决方案是:

    对我来说,问题是XML与BOM以UTF格式保存。

    也, this other blog entry 提供了对Java中同样问题的更多确认:

    在处理UTF-8编码的RSS源时,>prolog中的这个三字节模式(0xef 0xbb 0xbf)会导致各种有趣的XML解析问题。