jdom解析xml抛出Invalid byte 2 of 2-byte UTF-8 sequence.异常的解决方法
最近做一个项目的时候,老是报com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Invalid byte 2 of 2-byte UTF-8 sequence.异常,经过仔细排查发现,是xml解析的时候出现了问题。
情况是这样:A用ansi编码xml文件,xml中不包含<?xml version="1.0" encoding="UTF-8"?>,缺省情况解析也是按照utf-8来解析。然后发送给B,而B在解析xml的时候,如果xml文件中没有中文就没事,但是如果有中文解析就出现这种问题。源代码如下所示:XML中包含了中文字符
?
?
SAXBuilder builder=new SAXBuilder();String attrvalue="";File xmlfile=new File("susxml/test.xml");try {Document doc=builder.build(xmlfile);Element programme_tag=doc.getRootElement();List<Element> data=programme_tag.getChildren("DATA");if(data!=null && data.size()>0){Element element=data.get(0);attrvalue=element.getAttributeValue("NAME");System.out.println(attrvalue);}}catch(Exception ex){ex.printStackTrace();}
?此时抛出这样的异常com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Invalid byte 2 of 2-byte UTF-8 sequence.
?at com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.invalidByte(UTF8Reader.java:674)
?at com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.read(UTF8Reader.java:362)
?
改动代码
SAXBuilder builder=new SAXBuilder();String attrvalue="";File xmlfile=new File("susxml/test.xml");Reader xmlStreamReader=new InputStreamReader(new FileInputStream(xmlfile),"gbk");try {Document doc=builder.build(xmlStreamReader);Element programme_tag=doc.getRootElement();List<Element> data=programme_tag.getChildren("DATA");if(data!=null && data.size()>0){Element element=data.get(0);attrvalue=element.getAttributeValue("NAME");System.out.println(attrvalue);}}catch(Exception ex){ex.printStackTrace();}
?正确解析,异常不再出现。