我用SAX2去解析一个文件保存为UTF-8的文件的时候,会有如下错误:
org.xml.sax.SAXParseException: Content is not allowed in prolog.
....部分代码:
XMLReader xr = XMLReaderFactory.createXMLReader();
// MyXmlParser class is extends DefaultHandler implements LexicalHandler ...
MyXmlParser smp = new MyXmlParser();
xr.setContentHandler(smp);
xr.setErrorHandler(smp);
FileReader r = new FileReader(file);
xr.parse(new InputSource(r));orFileInputStream fis = new FileInputStream(file);
InputStreamReader rsd = new InputStreamReader(fis, "UTF-8");
xr.parse(new InputSource(rsd));请问如何解决?

解决方案 »

  1.   

    说明下,是文件的类型,不是XML的类型:<?xml version="1.0"  encoding="UTF-8"?>
      

  2.   

    看网上说, 对于UTF-8编码 XML,注意防止编辑器自动加上\uFFFE BOM头, xml parser会报告content is not allowed in prolog.我在DOS下用EDIT编辑器,可以看到这个BOM头, 然后删除后就可以了. 
    可是我的XML文件非常大, 请问在解析的时候如何把这个BOM头去掉?
      

  3.   

    你可以在 FileInputStream fis = new FileInputStream(file); 之后先调 fis.skip(2); 把开头的BOM字节跳过去,然后再 InputStreamReader rsd = new InputStreamReader(fis, "UTF-8");
      

  4.   

    刚才我看了下,开头的BOM是65279,而不是65534(\uFFFE), 不知道会不会由于编辑器的不同而不同?gtlang78() ,如果是保存文ANSI的类型,那是不需要skip(2)的,
    所以还是需要用UTF-8读入,然后判断下第一个字符吧?
      

  5.   

    你看一下这个吧,里面有人给出了Workaround的方法http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4508058
      

  6.   

    谢谢gtlang78,我看下. 顺便也看下解析<...之前有空格的错误