views:

1368

answers:

3

Per XStream's FAQ its default parser does not preserve UTF-8 document encoding, and one must provide their own encoder. How does one do this?

Thanks!

+4  A: 

Create a Writer with UTF-8 encoding. Pass the Writer as an argument to XStream's toXML method.

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

You may also use that Writer to include the XML Declaration.

writer.write("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>");
xStream.toXML(object, writer);
Jeromy Evans
davek
+3  A: 

Another solution would be to initiate the XStream-object with correct encoding, through a driver. Using the DomDriver this would look like:

XStream xstream = new XStream(new DomDriver("UTF-8"));

The (default) PrettyPrintWriter will be wrapped by an outputstream with correct encoding. You could not add the UTF-8 header this way however...

But DomDriver is slow.
Yan Cheng CHEOK
A: 

Why not use JAXB?

JAXBContext jaxbContext= JAXBContext.newInstance(Customer.class);

Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");  // Default
marshaller.marshal(aCustomer, System.out);
Blaise Doughan