XStream の FAQ によると、デフォルトのパーサーは UTF-8 ドキュメント エンコーディングを保持しないため、独自のエンコーダーを提供する必要があります。どうやってこれを行うのですか?
ありがとう!
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");
そのライターを使用して、XML宣言を含めることもできます。
writer.write("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>");
xStream.toXML(object, writer);
別の解決策は、ドライバーを介して、正しいエンコーディングで XStream オブジェクトを開始することです。DomDriver を使用すると、次のようになります。
XStream xstream = new XStream(new DomDriver("UTF-8"));
(デフォルトの) PrettyPrintWriter は、正しいエンコーディングの出力ストリームによってラップされます。ただし、この方法では UTF-8 ヘッダーを追加できませんでした...
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");