在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