2009-07-31 4 views

risposta

33

Creare un writer con codifica UTF-8. Passa il writer come argomento al metodo toXML di 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"); 

È anche possibile utilizzare quel writer per includere la dichiarazione XML.

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

+1 grazie - appena siamo imbattuti in questo & non riuscivo a trovarlo facilmente nei documenti. – davek

+0

grazie, ha appena risolto il mio problema. – Jaycee

11

Un'altra soluzione potrebbe essere quella di avviare il XStream-oggetto con codifica corretta, tramite un driver. Utilizzando il DomDriver questo sarebbe simile:

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

L'(default) PrettyPrintWriter sarà avvolto da un OutputStream con la codifica corretta. Non si poteva aggiungere l'UTF-8 di testa in questo modo però ...

+0

Ma DomDriver è lento. –

3

Con una versione corrente di Xstream, @ l'esempio di Jeromy sarebbe simile a questa:

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