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"))));

问题即可解决。

 

更多相关知识:www.bug315.com

 

你可能感兴趣的:(sequence)