【发布时间】:2010-11-15 17:54:50
【问题描述】:
根据 XStream 的常见问题解答,其默认解析器不保留 UTF-8 文档编码,并且必须提供自己的编码器。如何做到这一点?
谢谢!
【问题讨论】:
根据 XStream 的常见问题解答,其默认解析器不保留 UTF-8 文档编码,并且必须提供自己的编码器。如何做到这一点?
谢谢!
【问题讨论】:
使用 UTF-8 编码创建 Writer。将 Writer 作为参数传递给 XStream 的 toXML 方法。
XStream xstream = new xStream();
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
Writer writer = new OutputStreamWriter(outputStream, "UTF-8");
xStream.toXML(object, writer);
String xml = outputStream.toString("UTF-8");
您也可以使用该 Writer 来包含 XML 声明。
writer.write("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>");
xStream.toXML(object, writer);
【讨论】:
另一种解决方案是通过驱动程序以正确的编码启动 XStream 对象。使用 DomDriver 如下所示:
XStream xstream = new XStream(new DomDriver("UTF-8"));
(默认)PrettyPrintWriter 将由具有正确编码的输出流包装。 但是,您不能以这种方式添加 UTF-8 标头...
【讨论】:
使用当前版本的 XStream,@Jeromy 的示例将如下所示:
ByteArrayOutputStream stream = new ByteArrayOutputStream();
OutputStreamWriter writer = new OutputStreamWriter(stream, "UTF-8");
HierarchicalStreamWriter xmlWriter = new PrettyPrintWriter(writer);
xstream.marshal(object, xmlWriter);
return new String(stream.toByteArray(), "UTF-8");
【讨论】: