在读取用UTF8格式编码的XML文件时,采用如下代码: SAXBuilder sb = new SAXBuilder();
InputStreamReader isr = null;
// 以UTF-8编码格式读入XML文件
FileInputStream in = new FileInputStream(ff);
isr = new InputStreamReader(in, "UTF-8");
Document doc = sb.build(isr);不能正确解析,通过UltraEdit对XML文件进行分析,发现XML文件的头几个字符是EF BB BF。这样解析出来的XML文件会变成?<?xml version...。多了个?号,因此不能正常解析。
哪位高手碰到这种情况,该如何解决,请赐教!

解决方案 »

  1.   

    我怎么觉得有个?是正常的呢. 我的每个xml文件都有那样的?号啊.都能够正常解析.解析不出来不是这个的错吧.
      

  2.   

    对于Utf-8文件,很多编辑器(比如记事本)会在文件开头增加三个不可见的标志字节,如果作为mysql的输入文件,则必须要去掉这三个字符。(用linux的vi保存可以去掉这三个字符)。一个有趣的现象是,在中文windows下,创建一个新txt文件,用记事本打开,输入"连通"两个字,保存,再打开,你会发现两个字没了,只留下一个小黑点。
    不知道是不是这个原因?
    http://blog.csdn.net/qinysong/archive/2006/09/05/1179513.aspx
      

  3.   

    好像楼上说的不相干啊……
    那个?是正常的,哪个xml都有,不会影响解析的
      

  4.   

    import org.jdom.Document;
    import org.jdom.input.SAXBuilder;
    import org.jdom.output.XMLOutputter;
    import org.jdom.output.Format;
    public class PrintJDom
    {
    public static void main(String args[])
        {
         try
        {
         SAXBuilder sb = new SAXBuilder();
        
         //进行DTD验证
         //sb.setFeature("http://xml.org/sax/features/validation",true);  
         Document doc = sb.build("Student.xml");
        
         XMLOutputter xo = new XMLOutputter();
        
         //处理中文显示问题。
         Format format=Format.getPrettyFormat(); //格式化文档
    format.setEncoding("GB2312"); //由于默认的编码是utf-8,中文将显示为乱码,所以设为gbk
    xo.setFormat(format);
        
        
         xo.output(doc,System.out);
        }
        catch(Exception e)
        {
         e.printStackTrace();
        }
        }
    }-------------------------
    <?xml version="1.0" encoding="gb2312"?><StudentList>
    <!--注释1-->
    <Student ID="S101">
    <Name>大哥</Name>
    <Sex>男</Sex>
    <Age>45</Age>
    </Student>
    <Student ID="S102">
    <Name>二姐 <![CDATA[ skdjf<dkfjd>dkfjd&dj; ']]>
    </Name>
    <Sex>女</Sex>
    <Age>39</Age>
    </Student><Student ID="S103">
    <Name>三&lt;哥</Name>
    <Sex>男</Sex>
    <Age>33</Age>
    </Student>
    <Student ID="S104">
    <Name>四弟</Name>
    <Sex>男</Sex>
    <Age>28</Age>
    </Student> <Student ID="S105">
    <Name>五妹</Name>
    <Sex>女</Sex>
    <Age>25</Age>
    </Student></StudentList>