saxparser忽略字节顺序标记

时间:2010-04-16 11:28:46

标签: saxparser byte-order-mark

我们的saxparser不会忽略出现在文件开头的字节顺序标记

如何让我的sax解析器忽略字节顺序标记?

2 个答案:

答案 0 :(得分:2)

在十六进制编辑器中检查文件。

如果初始字节确实是\xEF\xBB\xBF后跟文档本身,则它是UTF-8虚假BOM。尽管UTF-8虚假BOM是一种严重的错误,生成它们的工具需要使用特殊编程酸来销毁,但XML规范会使require解析器识别并忽略此字节序列,因此如果您的SAX解析器没有它不合规,需要一些踢。

如果给你的初始字节实际上是以下之一:

\xC3\xAF\xC2\xBB\xC2\xBF 
\xEF\xBB\xBF\xC3\xAF\xC2\xBB\xC2\xBF 
\xEF\x00\xBB\x00\xBF\x00
\xFF\xFE\xEF\x00\xBB\x00\xBF\x00

然后你得到的是偶然的双重编码。在这种情况下,您需要查看生成该文件的程序,因为它的格式不正确,SAX解析器投诉是正确的,文件中的其他Unicode字符也可能会混乱。可能它正在做一些愚蠢的事情,比如将文档序列化为字节串然后通过伪造的解码/编码循环发送它。

无论哪种方式,如果您需要让解析器跳过麻烦的字节序列,您必须使用手动入侵的版本来提取它以删除此前缀。在不知道你的SAX解析器是什么(甚至是什么语言)的情况下,很难说如何做到这一点。

也许你可以在将输入流传递给解析器之前寻找它?也许你可以将文件读入一个字节字符串并将其初始字节的剪切传递给解析器?如果您的解析器没有为您提供这些选项,则必须以字节为单位加载文件,剪切开头并将其再次保存到新文件中。

答案 1 :(得分:1)

看起来你可能会给一个不期望utf-16的saxparser提供utf-16输入。尝试将数据转换为utf-8,它可能有所帮助。