xml解析错误:Invalid byte 2 of 2-byte UTF-8 sequence

在做接口解析时候出现的错误:Invalid byte 2 of 2-byte UTF-8 sequence. Nested exception: Invalid byte 2 of 2-byte UTF-8 sequence.



非常明显是在读取XML文件时候出现的编码问题。

在測试过程中发现。主要原因是xml文件里声明的编码与xml文件本身保存时的编码不一致。



如今解决的办法就有几个,主要说我測试过的两个方。

假设你是直接以文件的形式读取 能够更改XML文件里的 UTF-8编码 改为 GBK或GB2312 .

另一种可能是 你直接以URL 通过网络地址获取InputStream流形式读取 在转换成Document对象。这样的方法的解决的方法是先down 下来保存在本地。实现比較简单 用个OutputStream流写到你想保存的文件夹就可以。再解析down下来的文件 当中在 SAXReader saxReader = new SAXReader();

正常写法:

private ImpowerDeviceVo getResponseXml(String requestUrl, String requestXml) throws Exception

{

  if (StringUtils.isEmpty(requestUrl))

  {

   String message = "config-WebPortal.xml配置文件未配置,获取接口连接为空!";

   logger.debug(message);

   logger.error(message);

  }

 

  URL httpurl = new URL(requestUrl);

  HttpURLConnection httpConn = (HttpURLConnection) httpurl.openConnection();

  httpConn.setConnectTimeout(ImpowerXmlNodeName.connectTimeout);

  httpConn.setReadTimeout(ImpowerXmlNodeName.readTimeout);

  httpConn.setRequestMethod(ImpowerXmlNodeName.requestMethod);

  httpConn.setDoInput(true);

  // 将doOutput标志设置为true,指示应用程序要将数据写入URL连接。

httpConn.setDoOutput(true);

  OutputStream out = httpConn.getOutputStream();

  logger.debug("requestXml:" + requestXml);

  // 将參数写入URL接口连接

  out.write(requestXml.getBytes("utf-8"));

 

  SAXBuilder sax = new SAXBuilder();

  Document doc = sax.build(httpConn.getInputStream());

 

  // 获取到信息

  ImpowerDeviceVo impowerDeviceVo = this.getImpowerDeviceVoByDocument(doc);

 

  httpConn.disconnect();

  out.close();

return impowerDeviceVo;

}

改动方法例如以下:

造一个暂时文件保存所定的编码报文,然后读取,读取解析后关闭流,再删除文件,否则会报文件读取多误 read error

private ImpowerDeviceVo getResponseXml(String requestUrl, String requestXml) throws Exception

{

  if (StringUtils.isEmpty(requestUrl))

  {

   String message = "config-WebPortal.xml配置文件未配置,获取接口连接为空!";

   logger.debug(message);

   logger.error(message);

  }

 

  URL httpurl = new URL(requestUrl);

  HttpURLConnection httpConn = (HttpURLConnection) httpurl.openConnection();

  httpConn.setConnectTimeout(ImpowerXmlNodeName.connectTimeout);

  httpConn.setReadTimeout(ImpowerXmlNodeName.readTimeout);

  httpConn.setRequestMethod(ImpowerXmlNodeName.requestMethod);

  httpConn.setDoInput(true);

  // 将doOutput标志设置为true。指示应用程序要将数据写入URL连接。

httpConn.setDoOutput(true);

  OutputStream out = httpConn.getOutputStream();

  logger.debug("requestXml:" + requestXml);

  // 将參数写入URL接口连接

  out.write(requestXml.getBytes("utf-8"));

InputStream inputStream = httpConn.getInputStream();

  String fileName = "tempxml.xml";

 

  // 保存文件

  File f = new File(fileName);

  if (!f.exists())

  {

   f.createNewFile();

  }

  String xmlContent = readXmlStream(inputStream);

  System.out.println("进入-----------"+xmlContent);

  FileOutputStream fileOutputStream = new FileOutputStream(f);

  fileOutputStream.write(xmlContent.getBytes("utf-8"));

  fileOutputStream.close();

  // 打开文件

  f = new File(fileName);

  FileInputStream fileInputStream = new FileInputStream(f);

 

  SAXBuilder sax = new SAXBuilder();

//  Document doc = sax.build(httpConn.getInputStream());

  Document doc = sax.build(fileInputStream);

 

  // 获取到信息

  ImpowerDeviceVo impowerDeviceVo = this.getImpowerDeviceVoByDocument(doc);

 

  httpConn.disconnect();

  out.close();

  fileInputStream.close();

  f.delete();

return impowerDeviceVo;

}

xml:Invalid byte 2 of 2-byte UTF-8 sequence的更多相关文章

  1. CocoaPods pod install的时候报错:invalid byte sequence in UTF-8 (ArgumentError)解决办法

    CocoaPods pod install的时候报错:invalid byte sequence in UTF-8 (ArgumentError)解决办法: 基本可以确定是Podfile中的内容编码有 ...

  2. Python3 使用requests请求,解码时出错:'utf8' codec can't decode byte 0x8b in position 1: invalid start byte

    requests请求的响应内容能够通过几个属性获得: response.text 为解码之后的内容,解码会根据响应的HTTP Header中的Content-Type选择字符集.例如 "'C ...

  3. 使用 Visual Studio 2015 + Python3.6 + tensorflow 构建神经网络时报错:'utf-8' codec can't decode byte 0xcc in position 78: invalid continuation byte

    使用 Visual Studio 2015 + Python3.6 + tensorflow 构建神经网络时报错:'utf-8' codec can't decode byte 0xcc in pos ...

  4. 当在命令行中执行virtualenv venv时报此错误:'utf-8' codec can't decode byte 0xd5 in position 38: invalid continuation by

    1.windows中安装虚拟环境virtualenv时, 当在命令行中执行virtualenv venv时报此错误:'utf-8' codec can't decode byte 0xd5 in po ...

  5. python 读取文件时报错: UnicodeDecodeError: 'gbk' codec can't decode byte 0xa4 in position 127: illegal multibyte sequence

    UnicodeDecodeError: 'gbk' codec can't decode byte 0xa4 in position 127: illegal multibyte sequence p ...

  6. Python读取CSV文件,报错:UnicodeDecodeError: 'gbk' codec can't decode byte 0xa7 in position 727: illegal multibyte sequence

    Python读取CSV文件,报错:UnicodeDecodeError: 'gbk' codec can't decode byte 0xa7 in position 727: illegal mul ...

  7. python csv文件打开错误:_csv.Error: line contains NULL byte

    当python读取文件出现_csv.Error: line contains NULL byte时, # -*- coding:utf-8 -*- import csv with open(r'E:\ ...

  8. [原创]java WEB学习笔记81:Hibernate学习之路--- 对象关系映射文件(.hbm.xml):hibernate-mapping 节点,class节点,id节点(主键生成策略),property节点,在hibernate 中 java类型 与sql类型之间的对应关系,Java 时间和日期类型的映射,Java 大对象类型 的 映射 (了解),映射组成关系

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  9. 【转】java中byte, int的转换, byte String转换

    原文网址:http://freewind886.blog.163.com/blog/static/661924642011810236100/ 最近在做些与编解码相关的事情,又遇到了byte和int的 ...

随机推荐

  1. 浅谈http请求数据分析

    前段时间,我一个朋友给我打了个电话.说是现在在搞网络销售,问我能不能帮他整个自动发帖机.说实在的,以前没有弄过这块,我就跟他讲我试试看吧,能不能成不能保证.毕竟是搞程序的嘛,自学的能力还是有滴.经过一 ...

  2. window.history.back()的改进方法window.history.go()

    今天在做项目时,測试人员提出了一条bug,起初没当回事,在改动过程中才意识到其重要性,故记录下来. 依照需求,系统应该实现例如以下的功能:有三个关联的页面a.aspx(简称a),b.aspx(简称b) ...

  3. XML文件编码问题

    这两天的过程中的一个项目,以解决编码格式ANSI的xml当文件.我遇到了一些问题.下面的例子现在将总结分析过程. 通过win7记事本或notepad++创建一个xml文件test_source: &l ...

  4. 【rman,1】经典案例增量备份

    一.备份策略: 1.星期天晚上      -level 0 backup performed(全备份) 2.星期一晚上      -level 2 backup performed 3.星期二晚上   ...

  5. ASP.NET2.0自定义控件组件开发 第六章 深入讲解控件的属性

    原文:ASP.NET2.0自定义控件组件开发 第六章 深入讲解控件的属性 深入讲解控件的属性持久化(一) 系列文章链接: ASP.NET自定义控件组件开发 第一章 待续 ASP.NET自定义控件组件开 ...

  6. IOS使用Jenkins持续集成

    本文详细介绍了开发过程,提高效率进行IOS-Jenkins持续集成. 第二http://blog.csdn.net/monkey_cool/article/details/43270885 背景 平时 ...

  7. Chapter 2 User Authentication, Authorization, and Security(4):限制SA帐户管理权限

    原版的:http://blog.csdn.net/dba_huangzj/article/details/38817915,专题文件夹:http://blog.csdn.net/dba_huangzj ...

  8. MemoryBarrier,Volatile

    使用MemoryBarrier,Volatile进行同步 上一节介绍了使用信号量进行同步,本节主要介绍一些非阻塞同步的方法.本节主要介绍MemoryBarrier,volatile,Interlock ...

  9. POJ 3280 Cheapest Palindrome (DP)

     Description Keeping track of all the cows can be a tricky task so Farmer John has installed a sys ...

  10. 使用jprobe建设镜面层叠的原则和见解

    忽然想起的回忆,那是2007上周五在冬季,我看我的老湿调试Linux堆IP层,只看到他改变路由查找的逻辑,然后直接make install上的立竿见影的效果有点,我只知道,,这种逻辑必须再次更改编译内 ...