Invalid byte 1 of 1-byte UTF-8 sequence

问题:

      在解析XML文档时抛出:“Invalid byte 1 of 1-byte UTF-8 sequence.”错误。

 

产生的原因:

      由于XML编码与将XML字符串转换成字节数组(getBytes()方法)时使用编码不一致所导致。

 

实例:

<?xml version='1.0' encoding='UTF-8' ?>
<ROOT>
   <REF>false</REF>
   <MSG>错误信息:指定的信息不存在</MSG>
</ROOT>

 解析该XML的java代码:

public Map<String,Object> parseXMLToMap(String xml){
		Map<String,Object> maps = new HashMap<String,Object>();
		
		try{
			DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
			DocumentBuilder db = dbf.newDocumentBuilder();
			Document doc = db.parse(new ByteArrayInputStream(xml.getBytes()));
			
			Element eleRef = (Element)doc.getElementsByTagName("REF").item(0);
			Element eleMsg = (Element)doc.getElementsByTagName("MSG").item(0);
			
			maps.put("REF", eleRef.getFirstChild().getNodeValue());
			maps.put("MSG", eleMsg.getFirstChild().getNodeValue());
			
			return maps;
		} catch(Exception e){
			e.printStackTrace();
		}
		
		return null;
	}

 注意:Document doc = db.parse(new ByteArrayInputStream(xml.getBytes()));该行代码将要解析的XML字符串以平台默认的字符编码方式转换成一个字节数组,然后创建ByteArrayInputStream对象传递给DocumentBuilder的parse方法进行解析。但是XML文件的encoding='UTF-8',然而windows平台默认编码并非UTF-8,因此产生了乱码。

 

解决办法:

将此行代码Document doc = db.parse(new ByteArrayInputStream(xml.getBytes()));

改成

Document doc = db.parse(new ByteArrayInputStream(xml.getBytes(Charset.forName("UTF-8"))));

问题即可解决。

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值