我有一個對象,由XJC生成,調用Product
。我想將product.currentPrice (a String)
設置爲£210
,其中£
是貨幣符號(從系統中的其他位置傳入)。如何防止JAXB轉義字符串
問題是,JAXB正在逃避我的符號,所以它產生了£210
。我如何讓它不這樣做?
我有一個對象,由XJC生成,調用Product
。我想將product.currentPrice (a String)
設置爲£210
,其中£
是貨幣符號(從系統中的其他位置傳入)。如何防止JAXB轉義字符串
問題是,JAXB正在逃避我的符號,所以它產生了£210
。我如何讓它不這樣做?
默認情況下,JAXB的編組器實現通常會轉義字符。要改變這個默認行爲,你將不得不編寫一個實現了接口com.sun.xml.bind.marshaller.CharacterEscapeHandler
的類。
集現Marshaller
CharacterEscapeHandler escapeHandler = NoEscapeHandler.theInstance;
marshaller.setProperty("com.sun.xml.bind.characterEscapeHandler", escapeHandler);
該處理程序,您可以看看提供JAXB樣品,字符轉義樣品
好的,這很好,但如果我那麼我是否被迫編寫一個涵蓋如何逃避每一個字符的實現。如果角色不是我感興趣的角色,我該如何委派到默認行爲? – rjsang 2010-07-20 11:31:21
我接受這是正確的答案,因爲它應該是正確的答案。對於任何閱讀本文希望它會幫助你的人來說,這實際上並不適用於JAXB 2.2.1,因爲有一個bug(https://jaxb.dev.java.net/issues/show_bug.cgi?id=777) – rjsang 2010-07-20 16:27:37
由於它似乎已經逃脫了源代碼,不應該在傳遞給JAXB之前簡單地轉義它嗎? – herman 2015-05-12 10:48:56
,具體取決於您是否完全找你可以:
像rjsang所述CDATA串,有一個錯誤使用「UTF-8」的編碼,這是默認時。如果您不關心區分大小寫的問題,請嘗試使用「utf-8」並讓您的自定義助手按其應有的工作。 UTF-16也可以工作,除了「UTF-8」:「uTf-8」等。
標準中的可怕錯誤。
下面是代碼這樣做:
marshaller.setProperty(javax.xml.bind.Marshaller.JAXB_ENCODING, "utf-8");
這幫助了我,似乎我們不需要使用自定義轉義處理程序 – Akceptor 2017-08-08 13:17:59
如果您實現這個接口:com.sun.xml.bind.marshaller.CharacterEscapeHandler,用自己的字符轉義,但你要委託某些行爲傳統的轉義,你可以使用這些clases的(或寫根據他們自己的代碼):
他們來與JAXB RI執行AKA JAXB-implement執行-2.2.1.jar。
希望這個幫助給任何人,就像它幫助了我。
解決方案XmlStreamWriter
final XMLOutputFactory streamWriterFactory = XMLOutputFactory.newFactory();
streamWriterFactory.setProperty("escapeCharacters", false);
可能重複? http://stackoverflow.com/questions/1506663/can-i-force-jaxb-not-to-convert-into-quot-for-example-when-marshalling-to-x – 2010-07-20 11:02:30