我创建了一个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 áéíóú”中的文本。当我向服务器请求这个时,我获得了一个带有 UTF-8 编码(OK)的 HTTP 响应,XML 定义说它是 UTF-8,但是节点的文本将被编码为 ISO-8859-1(这是我的猜测,因为当我使用 Firefox 更改编码时,该字符串看起来不错)。
那么,为什么当定义应该是 UTF-8 时,dom4j 将文字字符串编码为 ISO?我的代码有问题吗?谢谢