2009-07-31 19 views

Trả lời

33

Tạo Writer bằng mã hóa UTF-8. Chuyển Writer làm đối số cho phương thức toXML của XStream.

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"); 

Bạn cũng có thể sử dụng Writer đó để bao gồm Tuyên bố XML.

writer.write("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>"); 
xStream.toXML(object, writer); 
+2

+1 nhờ - chỉ cần stumbled trên này & không thể tìm thấy nó trong tài liệu một cách dễ dàng. – davek

+0

cảm ơn bạn, nó chỉ giải quyết được vấn đề của tôi. – Jaycee

11

Một giải pháp khác là bắt đầu đối tượng XStream với mã hóa chính xác, thông qua trình điều khiển. Sử dụng DomDriver này sẽ như thế nào:

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

The (mặc định) PrettyPrintWriter sẽ được bao bọc bởi một OutputStream với mã hóa chính xác. Bạn không thể thêm UTF-8 tiêu đề theo cách này tuy nhiên ...

+0

Nhưng DomDriver chậm. –

3

Với phiên bản hiện tại của xStream, @ dụ Jeromy của sẽ trông như thế này:

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"); 
Các vấn đề liên quan