Подтвердить что ты не робот

Как кодировать UTF-8 с помощью инфраструктуры XStream?

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

Спасибо!

4b9b3361

Ответ 1

Создайте 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);

Ответ 2

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

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

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

Ответ 3

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