2016-03-07 68 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