2009-07-31 12 views

Respuesta

33

Crea un escritor con codificación UTF-8. Pase el escritor como argumento al método XML de XStream.

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

También puede utilizar ese escritor para incluir la declaración XML.

writer.write("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>"); 
xStream.toXML(object, writer); 
+2

+1 gracias - sólo tropezamos con este y no pude encontrarlo en los documentos fácilmente. – davek

+0

gracias, simplemente resolvió mi problema. – Jaycee

11

Otra solución sería iniciar el objeto XStream con la codificación correcta, a través de un controlador. Utilizando el DomDriver este sería el resultado:

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

El (por defecto) PrettyPrintWriter será envuelto por un OutputStream con la codificación correcta. No se podía añadir el UTF-8 cabecera de esta manera, sin embargo ...

+0

Pero DomDriver es lento. –

3

Con una versión actual de xstream, @ ejemplo de Jeromy se vería así:

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