在XML元素的编码不正确使用dom4j中使用Spring MVC(Incorrect encodin

2019-09-23 01:51发布

我创建了一个AbstractView以输出一些XML浏览器,如下所示:

public abstract class AbstractXmlView extends AbstractView {

public AbstractXmlView() {
    setContentType("application/xml");
}

@Override
protected void renderMergedOutputModel(Map<String, Object> model,
        HttpServletRequest request, HttpServletResponse response)
        throws Exception {

    response.setCharacterEncoding("UTF-8");

    Document document = new DOMDocument();
    document.setXMLEncoding("UTF-8");

    buildXmlDocument(model, document, request, response);

    response.getOutputStream().print(document.asXML());
}

public abstract void buildXmlDocument(Map<String, Object> model,
        Document document, HttpServletRequest request,
        HttpServletResponse response) throws Exception;

正如你所看到的,我的子类将定义buildXMLDocument以填充将被实际交付给浏览器的XML文档的方法,所以这里有一个简单的实现:

public class GetXmlContacts extends AbstractXmlView {

@Override
public void buildXmlDocument(Map<String, Object> model, Document document,
        HttpServletRequest request, HttpServletResponse response)
        throws Exception {

    Element node = document.addElement("node");
    node.setText ("I'm unicode áéíóú");
}

请注意,文字字符串作为元素文本node “我的unicode AEIOU”。 当我要求这个服务器,我获得与UTF-8编码的HTTP响应(OK),XML定义说,这是UTF-8,但该节点的文本将被编码为ISO-8859-1(这是我的猜测,因为当我更改编码与Firefox该字符串看起来OK)。

那么,为什么dom4j的enconding时,它的定义应该是UTF-8文字字符串作为ISO? 是不是有什么错我的代码? 谢谢

Answer 1:

解决了! 因为与dom4j的一些bug, element.setText()不会在意指定的编码和document.asXML()将返回一个字符串,ISO,所以我修改了行,如下所示:

response.getOutputStream().write(document.asXML().getBytes("UTF-8"));

和一切工作正常..



文章来源: Incorrect encoding in xml element using dom4j with Spring MVC