我有一个对象,由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