javax.xml.bind.Marshaller使用十进制值编码unicode字符

par*_*yle 4 java xml axis2 utf-8

我有一个需要生成xml的服务.目前我使用jaxb和Marshaller使用StringWriter创建xml.

这是我得到的当前输出.

<CompanyName>Bakery é &amp;</CompanyName>
Run Code Online (Sandbox Code Playgroud)

虽然这可能适用于某些Web服务,但我需要转义特殊的unicode字符.令我的xml的服务需要有这样的服务:

<CompanyName>Bakery &#233; &amp;</CompanyName>
Run Code Online (Sandbox Code Playgroud)

如果我使用StringEscapeUtils,commons-lang我最终会得到像下面这样的东西.这个也不起作用:

<CompanyName>Bakery &amp;#233; &amp;amp;</CompanyName>
Run Code Online (Sandbox Code Playgroud)

是否有一些Marshaller设置允许我将这些特殊字符编码为十进制值?

Ed *_*aub 5

是的,Marshaller.setProperty(jaxb.encoding,encoding)将设置用于文档的编码.我猜你想要"US-ASCII".


McD*_*ell 5

正如Ed Staub建议的那样,尝试设置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);
  }
}
Run Code Online (Sandbox Code Playgroud)