首页 > Java技术 > org.dom4j.DocumentException: Invalid byte 1 of 1-byte UTF-8 sequence异常解决
201611月22

org.dom4j.DocumentException: Invalid byte 1 of 1-byte UTF-8 sequence异常解决

“org.dom4j.DocumentException: Invalid byte 1 of 1-byte UTF-8 sequence.”异常分析

问题分析:
该异常由下面的reader.read(file);语句抛出:
SAXReader reader = new SAXReader();
Document doc = reader.read(file);

产生这个异常的原因是:
所读的xml文件实际是GBK或者其他编码的,而xml内容中却用指定编码为utf-8,所以就报异常了!
说简单点当你解析别人的xml格式出现这个错误可能就是别人在生成xml时没有保存为utf-8的字符编码格式。

在中文版的window下Java的默认的编码为GBK,也就是所虽然我们标识了要将xml保存为utf-8格式但实际上文件是以GBK格式来保存的,所以这也就是为什么能够我们使用GBK、GB2312编码来生成xml文件能正确的被解析,而以UTF-8格式生成的文件不能被xml解析器所解析的原因。

注释:参考网上的《Java/J2EE中文问题终极解决之道》一文,编码问题原因应该是:操作系统编码为GBK,而xml指定为utf-8,SAXReader使用系统的默认编码GBK,所以存在需要转换编码的问题,也就自然会出现乱码了!解决:让文件编码和java 操作该文件的接口的编码一致;

解决方案

1、最简单就是把

<?xml version="1.0" encoding="UTF-8"?>改成<?xml version="1.0" encoding="gbk"?>

2、或者把xml打开另存的时候把字符集改为UTF-8后保存
3、在代码解析的时候先把xml重新写一遍

SAXReader reader = new SAXReader();    
org.dom4j.Document document = reader.read("D:\\iitshare.xml");    
OutputFormat of = new OutputFormat();    
of.setEncoding("UTF-8"); //改变编码方式    
XMLWriter writer = new XMLWriter(new FileWriter "d:\\dom4j.xml"), of);  

4、直接dom4j读取的时候用io来读,修改字符编码

FileInputStream in = new FileInputStream(new File(fileName));  
Reader read = new InputStreamReader(in,"gbk");  
Document document = reader.read(read); 

5、另外一种情况,如果XML是自己编辑的字符串,可以不用SAXReader解析,采用DocumentHelper解析
比如XML字符串:

String rtnVal ="<?xml version=\"1.0\" encoding=\"utf-8\" ?>
<returnsms><returnstatus>Success</returnstatus>
<message>ok</message><remainpoint>15</remainpoint>
<taskID>7360110</taskID><successCounts>1</successCounts>
</returnsms>";

原始解析方法
SAXReader saxReader = new SAXReader();
Document doc = saxReader.read(new ByteArrayInputStream(rtnVal.getBytes()));
Element Cmd = doc.getRootElement();

修改后的解析方法
Document doc=DocumentHelper.parseText(rtnVal);
//获取根节点
Element rootElt=doc.getRootElement();
//获取根节点下的子节点的值
String returnstatus=rootElt.elementText(“returnstatus”).trim();
String mess=rootElt.elementText(“message”).trim();

文章作者: iitshare
本文地址:http://www.iitshare.com/org-dom4j-documentexception-invalid-byte.html
版权所有 © 转载时必须以链接形式注明作者和原始出处!

更多

One Response to “org.dom4j.DocumentException: Invalid byte 1 of 1-byte UTF-8 sequence异常解决”

  1. #1 网赚助手 回复 | 引用 Post:2016-12-22 20:51

    网赚助手评论引流博客大全已经收录了您的网站

发表评论