Mỗi câu hỏi thường gặp của XStream trình phân tích cú pháp mặc định của nó không bảo toàn được mã hóa tài liệu UTF-8 và phải cung cấp bộ mã hóa riêng. Làm thế nào để làm điều này?Làm cách nào để mã hóa UTF-8 bằng khung công tác XStream?
Cảm ơn!
Mỗi câu hỏi thường gặp của XStream trình phân tích cú pháp mặc định của nó không bảo toàn được mã hóa tài liệu UTF-8 và phải cung cấp bộ mã hóa riêng. Làm thế nào để làm điều này?Làm cách nào để mã hóa UTF-8 bằng khung công tác XStream?
Cảm ơn!
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);
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 ...
Nhưng DomDriver chậm. –
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");
+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
cảm ơn bạn, nó chỉ giải quyết được vấn đề của tôi. – Jaycee