14

XStream の FAQ によると、デフォルトのパーサーは UTF-8 ドキュメント エンコーディングを保持しないため、独自のエンコーダーを提供する必要があります。どうやってこれを行うのですか?

ありがとう!

4

3 に答える 3

36

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);
于 2009-10-09T02:35:14.543 に答える
13

別の解決策は、ドライバーを介して、正しいエンコーディングで XStream オブジェクトを開始することです。DomDriver を使用すると、次のようになります。

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

(デフォルトの) PrettyPrintWriter は、正しいエンコーディングの出力ストリームによってラップされます。ただし、この方法では UTF-8 ヘッダーを追加できませんでした...

于 2009-11-20T18:30:39.260 に答える
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");
于 2012-11-14T14:46:05.720 に答える