2016-03-07 23 views
2

有了这个代码:JAXB编组为StringWriter:是否需要声明字符串编码(例如UTF-8)?

 JAXBContext jaxbContext = JAXBContext.newInstance(aObj.getClass()); 
     Marshaller marshaller = jaxbContext.createMarshaller(); 
     StringWriter sw = new StringWriter(); 
     marshaller.marshal(aObj, sw); 
     return sw.toString(); 

我直接序列化JAXB对象到StringWriter的:我的例子表明,两个字节的UTF-8字符,例如“U”预期在完美序列化,即它们都包含产生的java字符串。稍后,在通过套接字发送时,生成的java字符串将被序列化为aXml.getBytes(“UTF-8”)。

如果上述编码器没有明确声明UTF-8字符编码,会不会很危险?

回答

1

这并不危险。

默认情况下,将的Marshaller生成XML 数据到java.io.OutputStream中,或java.io.Writer中时使用UTF-8编码。使用 setProperty API来更改在这些编组操作期间使用的输出编码。预计客户端应用程序将提供有效的 字符编码名称,如W3C XML 1.0推荐标准 中所定义并且受Java平台支持。

jaxb.encoding - 值必须是java.lang.String 输出编码编组XML数据时使用。如果未指定此属性,Marshaller将默认使用“UTF-8”。

Reference here

+0

感谢您的见解。我的问题确实更多:如果目标是StringWriter(根据字符而不是字节定义),字符编码是否会起作用? – Heri

相关问题