在Spring MVC中使用dom4j在xml元素中编码不正确

我创建了一个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 Document,因此这是一个简化的实现:

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áéíóú”

中将文字字符串记为文本。当我向服务器请求此消息时,我获得了带有UTF-8编码(OK)的HTTP响应,XML定义说它是UTF-8,但是该节点的文本将被编码为ISO-8859-1(这是我的猜测,因为当我使用Firefox更改编码时,该字符串看起来不错)。

那么,为什么dom4j在定义应为UTF-8的情况下将文字字符串编码为ISO?我的代码有问题吗?谢谢

回答:

解决了!因为dom4j的某些错误element.setText()将不关心指定的编码,并且document.asXML()会返回ISO字符串,因此我对该行进行了如下修改:

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

而且一切正常。

以上是 在Spring MVC中使用dom4j在xml元素中编码不正确 的全部内容, 来源链接: utcz.com/qa/399403.html

回到顶部