序列化表情符号字符时,我在Android上遇到相同的问题。在转换器中使用UTF-8编码时,输出为HTML字符实体(UTF-16代理对),这些实体随后将破坏读取数据的其他解析器。
这就是我最终解决它的方式:
StringWriter sw = new StringWriter();sw.write("<?xml version="1.0" encoding="UTF-8" ?>");Transformer t = TransformerFactory.newInstance().newTransformer();// this will work because we are creating a Java string, not writing to an outputt.setOutputProperty(OutputKeys.ENCODING, "UTF-16"); t.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");t.transform(new DOMSource(elementNode), new StreamResult(sw));return IOUtils.toInputStream(sw.toString(), Charset.forName("UTF-8"));


