我有一个需要生成xml的服务。目前我正在使用jaxb和Marshaller来使用StringWriter创建xml。
这是我得到的当前输出。
<CompanyName>Bakery é &</CompanyName>
虽然这可能适用于某些Web服务,但我需要转义特殊的unicode字符。消耗我的xml的服务需要这样:
<CompanyName>Bakery é &</CompanyName>
如果我使用StringEscapeUtils
中的commons-lang
,我最终会得到类似下面的内容。这个也不起作用:
<CompanyName>Bakery &#233; &amp;</CompanyName>
是否有一些Marshaller设置允许我将这些特殊字符编码为十进制值?
答案 0 :(得分:5)
是的,Marshaller.setProperty(jaxb.encoding, encoding )将设置用于文档的编码。我猜你想要“US-ASCII”。
答案 1 :(得分:5)
作为Ed Staub suggests,请尝试设置jaxb.encoding
属性。 US-ASCII
编码将导致前128个代码点之上的任何内容被转义。
@XmlRootElement(name = "Company")
public class Company {
private String companyName = "Bakery \u00E9 &";
@XmlElement(name = "CompanyName")
public String getCompanyName() { return companyName; }
public void setCompanyName(String bar) { this.companyName = bar; }
public static void main(String[] args) throws Exception {
JAXBContext ctxt = JAXBContext.newInstance(Company.class);
Marshaller m = ctxt.createMarshaller();
m.setProperty("jaxb.encoding", "US-ASCII");
m.marshal(new Company(), System.out);
}
}