2009-07-31 7 views

ответ

33

Создайте Writer с кодировкой UTF-8. Передайте Writer как аргумент метода XXTream 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); 
+2

+1 спасибо - просто наткнулся на это и не мог найти его в документах легко. – davek

+0

спасибо, он просто решил мою проблему. – Jaycee

11

Другим решением было бы инициировать объект XStream с правильной кодировкой через драйвер. Использование DomDriver это будет выглядеть так:

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

The (по умолчанию) PrettyPrintWriter будет обернут в OutputStream с правильной кодировкой. Вы не могли бы добавить UTF-8 заголовка таким образом, однако ...

+0

Но DomDriver работает медленно. –

3

С текущей версией XStream, @ примером Джероми был бы выглядеть следующим образом:

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