Según las preguntas más frecuentes de XStream, su analizador predeterminado no conserva la codificación de documentos UTF-8, y uno debe proporcionar su propio codificador. ¿Cómo hace uno esto?¿Cómo codifico UTF-8 usando el marco XStream?
Gracias!
Según las preguntas más frecuentes de XStream, su analizador predeterminado no conserva la codificación de documentos UTF-8, y uno debe proporcionar su propio codificador. ¿Cómo hace uno esto?¿Cómo codifico UTF-8 usando el marco XStream?
Gracias!
Crea un escritor con codificación UTF-8. Pase el escritor como argumento al método XML de 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");
También puede utilizar ese escritor para incluir la declaración XML.
writer.write("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>");
xStream.toXML(object, writer);
Otra solución sería iniciar el objeto XStream con la codificación correcta, a través de un controlador. Utilizando el DomDriver este sería el resultado:
XStream xstream = new XStream(new DomDriver("UTF-8"));
El (por defecto) PrettyPrintWriter será envuelto por un OutputStream con la codificación correcta. No se podía añadir el UTF-8 cabecera de esta manera, sin embargo ...
Pero DomDriver es lento. –
Con una versión actual de xstream, @ ejemplo de Jeromy se vería así:
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 gracias - sólo tropezamos con este y no pude encontrarlo en los documentos fácilmente. – davek
gracias, simplemente resolvió mi problema. – Jaycee