2010-04-16 90 views
1

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

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

+0

有可能没有办法...只保存没有BOM – 2010-04-16 11:30:07

回答

1

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

2

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

如果最初的字节确实是\xEF\xBB\xBF后跟文档本身,那么它是一个UTF-8人造BOM。尽管UTF-8人造材料清单是一种犯规错误,生成它们的工具需要使用特殊编程酸销毁,但XML规范确实可以识别和忽略此字节序列,因此如果您的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解析器是什么(甚至是什么语言),很难说如何做到这一点。

也许你可以在将它传递给解析器之前寻找输入流?也许你可以将文件读入一个字节字符串,并将其中的初始字节删除到解析器?如果你的解析器没有给你这些选项,你将不得不以字节为单位加载文件,剪辑开始并保存到一个新的文件。