我们的saxparser不会忽略出现在文件开头的字节顺序标记。
如何让我的sax解析器忽略字节顺序标记?
发布于 2010-04-16 19:33:55
看起来您可能会将utf-16输入提供给一个不需要utf-16的saxparser。试着把数据转换成utf-8,可能会有帮助。
发布于 2010-04-16 19:51:21
在十六进制编辑器中检查文件。
如果初始字节确实是后面跟着文档本身的\xEF\xBB\xBF,那么它就是一个UTF8faUUX-BOM。虽然UTF-8的SAX 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解析器是什么(甚至不知道是什么语言),就很难说出如何做到这一点。
也许您可以在将输入流传递给解析器之前查找输入流?也许你可以将文件读入一个字节字符串,并将其传递给解析器,去掉了初始字节?如果您的解析器没有为您提供这些选项,您将不得不以字节的形式加载文件,裁剪开头并将其再次保存为新文件。
https://stackoverflow.com/questions/2652497
复制相似问题