1

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

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

4

2 回答 2

3

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

如果文档本身确实跟在初始字节\xEF\xBB\xBF后面,那么它就是一个 UTF-8 仿 BOM。尽管 UTF-8 人造 BOM 是一种严重的错误,并且生成它们的工具需要用特殊的编程酸来销毁,但 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 解析器是什么(甚至是什么语言)的情况下,很难说出如何做到这一点。

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

于 2010-04-16T11:51:21.300 回答
1

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

于 2010-04-16T11:33:54.720 回答