Как мне кодировать UTF-8, используя платформу XStream? - PullRequest
14 голосов
/ 31 июля 2009

В соответствии с часто задаваемыми вопросами XStream его синтаксический анализатор по умолчанию не сохраняет кодировку документов UTF-8, и необходимо предоставить собственный кодер. Как это сделать?

Спасибо!

Ответы [ 3 ]

35 голосов
/ 09 октября 2009

Создать Writer с кодировкой UTF-8. Передайте 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);
13 голосов
/ 20 ноября 2009

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

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

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

3 голосов
/ 14 ноября 2012

В текущей версии 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");
...