В соответствии с требованиями XStream по умолчанию его синтаксический анализатор по умолчанию не сохраняет кодировку UTF-8, и необходимо предоставить собственный кодер. Как это сделать?Как кодировать UTF-8 с помощью инфраструктуры XStream?
Спасибо!
В соответствии с требованиями XStream по умолчанию его синтаксический анализатор по умолчанию не сохраняет кодировку UTF-8, и необходимо предоставить собственный кодер. Как это сделать?Как кодировать UTF-8 с помощью инфраструктуры XStream?
Спасибо!
Создайте 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);
Другим решением было бы инициировать объект XStream с правильной кодировкой через драйвер. Использование DomDriver это будет выглядеть так:
XStream xstream = new XStream(new DomDriver("UTF-8"));
The (по умолчанию) PrettyPrintWriter будет обернут в OutputStream с правильной кодировкой. Вы не могли бы добавить UTF-8 заголовка таким образом, однако ...
Но DomDriver работает медленно. –
С текущей версией 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");
+1 спасибо - просто наткнулся на это и не мог найти его в документах легко. – davek
спасибо, он просто решил мою проблему. – Jaycee