javax.xml.bind.Marshaller编码带有十进制值的unicode字符

时间:2011-07-16 01:37:15

标签: java xml utf-8 axis2

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

这是我得到的当前输出。

<CompanyName>Bakery é &amp;</CompanyName>

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

<CompanyName>Bakery &#233; &amp;</CompanyName>

如果我使用StringEscapeUtils中的commons-lang,我最终会得到类似下面的内容。这个也不起作用:

<CompanyName>Bakery &amp;#233; &amp;amp;</CompanyName>

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

2 个答案:

答案 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);
  }
}