xml:Invalid byte 2 of 2-byte UTF-8 sequence
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的更多相关文章
- CocoaPods pod install的时候报错:invalid byte sequence in UTF-8 (ArgumentError)解决办法
CocoaPods pod install的时候报错:invalid byte sequence in UTF-8 (ArgumentError)解决办法: 基本可以确定是Podfile中的内容编码有 ...
- Python3 使用requests请求,解码时出错:'utf8' codec can't decode byte 0x8b in position 1: invalid start byte
requests请求的响应内容能够通过几个属性获得: response.text 为解码之后的内容,解码会根据响应的HTTP Header中的Content-Type选择字符集.例如 "'C ...
- 使用 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 ...
- 当在命令行中执行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 ...
- 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 ...
- 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 ...
- python csv文件打开错误:_csv.Error: line contains NULL byte
当python读取文件出现_csv.Error: line contains NULL byte时, # -*- coding:utf-8 -*- import csv with open(r'E:\ ...
- [原创]java WEB学习笔记81:Hibernate学习之路--- 对象关系映射文件(.hbm.xml):hibernate-mapping 节点,class节点,id节点(主键生成策略),property节点,在hibernate 中 java类型 与sql类型之间的对应关系,Java 时间和日期类型的映射,Java 大对象类型 的 映射 (了解),映射组成关系
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- 【转】java中byte, int的转换, byte String转换
原文网址:http://freewind886.blog.163.com/blog/static/661924642011810236100/ 最近在做些与编解码相关的事情,又遇到了byte和int的 ...
随机推荐
- 当用户登录,经常会有实时的下拉框,例如,输入邮箱,将会@qq.com,@163.com,@sohu.com
如图所示, 码,如以下:<input id="user_sn" class="loginInput" name="user_sn" t ...
- 对于COM对象使用ComPtr代替传统指针
对于COM对象来说使用传统指针比较麻烦,还要记得Release()防止内存泄漏,一不小心就会出现各种各样的问题.针对这种问题微软提供了对于COM对象的智能指针ComPtr,这里是官方文档https:/ ...
- Ubuntu下搭建ASP.NET 5
在Ubuntu下搭建ASP.NET 5开发环境 0x00 写在前面的废话 年底这段时间实在太忙了,各种事情都凑在这个时候,没时间去学习自己感兴趣的东西,所以博客也好就没写了.最近工作上有个小功能要 ...
- WebLogic部署集群和代理服务器
应公司要求,最近在学习weblogic集群这块的知识,下面我把我这几天学到的,以及过程中遇到的问题及如何解决的,分享给大家.首先,weblogic是Orcale公司的一款产品,至于其作用,我想就不用我 ...
- 关于WCF的引用,添加服务和添加web服务的区别
原文:关于WCF的引用,添加服务和添加web服务的区别 本章内容主要是根据我做的实验来阐述这2种添加服务针对WCF的不同之处,我们按照示例一步一步来看. 如下是工程的结构: 该WCF服务是通过控制台程 ...
- 设计模式模式游客(Visitor)摘录
23种子GOF设计模式一般分为三类:创建模式.结构模型.行为模式. 创建模式抽象的实例,怎样创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而一个对象创建型模式将实例化托付给还 ...
- poj 3013 Big Christmas Tree (dij+优先级队列优化 求最短)
模板 意甲冠军:给你一个图,1始终根,每一方都有单价值,每个点都有权重新. 每个边缘的价格值 = sum(后继结点重)*单价方值. 最低价格要求树值,它构成了一棵树n-1条边的最小价值. 算法: 1. ...
- UIButton 文字图片排列
UIButton缺省值是:图画-文字水平,所以我们并不需要调整. 1.写作-图画 水平显示,以前的文本,图片后再次 [btn setTitleEdgeInsets:UIEdgeInsetsMake(0 ...
- 【Espruino】NO.03 从点灯开始
http://blog.csdn.net/qwert1213131/article/details/26819773 本文属于个人理解,能力有限,纰漏在所难免,还望指正! [小鱼有点电] 点灯程序应该 ...
- 达到HTTP合约Get、Post和文件上传功能——采用WinHttp介面
于<采用WinHttp实现HTTP协议Get.Post和文件上传功能>一文中,我已经比較具体地解说了怎样使用WinHttp接口实现各种协议. 在近期的代码梳理中,我认为Post和文件上传模 ...