`

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();
		}

 正确解析,异常不再出现。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics