Dom4j的asXML()自动编码的解决办法
在使用Dom4j的时候,有时候需要将一个Document对象转换为一个String,可以直接调用Document.asXML()方法来
实现。可是调用这个方法的结果是:生成的字符串按照UTF-8进行了重新编码。这样,如果之前你的xml编码为GBK,那么你的调用此方法后,编码就变为
UTF-8了,输出的中文字符就发生乱码。
有什么解决方案呢,在网上找了很久,也没找到原因。最后经过翻阅Dom4j的API文档,终于找到一个解决方案----重新格式化XML,这样就有机会对XML重新编码并获取到想要String。
从此也想为什么不提供一个Document.asXML(String charset)的方法呢?看来还是Dom4j把中国人忽略了。
下面看看解决方案:
首先读入文件为String:
InputStream in = IssuePlan.class
.getClassLoader().getResourceAsStream("temp/test.xml"
);
if
(in == null
) {
log.info("没有找到temp/test.xml"
);
}
String xml = StringFileToolkit.stream2String(in, charset);
Document doc = null
;
try
{
doc = DocumentHelper.parseText(xml);
doc.setXMLEncoding(charset);
} catch
(DocumentException e) {
e.printStackTrace();
log.error("XML格式错误,请检查temp/test.xml是否存在于Classpath下以及合理性!"
);
throw
new
Exception(e);
}
这里将XML忠实的按照原有的编码读取出来了,注意,读取出来后,立即对doc对象指定编码,否则会按照操作系统默认的编码处理。
如果你在此处调用doc.asXML(),那么,就得到了这个XML文件UTF-8的编码,如果之间不是UTF-8,那么这样编码是错误的。
因此,要导出合理编码的字符串,还要调用格式方法,这个方法是我自己写的:
/**
* 格式化XML文档
*
* @param document xml文档
* @param charset 字符串的编码
* @return 格式化后XML字符串
*/
public
static
String formatXML(Document document, String charset) {
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding(charset);
StringWriter sw = new
StringWriter();
XMLWriter xw = new
XMLWriter(sw, format);
try
{
xw.write(document);
xw.flush();
xw.close();
} catch
(IOException e) {
log.error("格式化XML文档发生异常,请检查!"
, e);
}
return
sw.toString();
}
你可以随意指定编码,但是你调用之前必须保证你的字符串编码和这里参数的编码一致,这样才是正确的调用。
-----------------------------------
这里还有一篇文章,但是忽略了或者是回避了Dom4j的转码问题:
分享到:
相关推荐
Dom4j解析XML文档.doc Dom4j解析XML文档.doc Dom4j解析XML文档.doc Dom4j解析XML文档.doc
dom4j解析xml文件代码示例 dom4j解析xml文件代码示例 dom4j解析xml文件代码示例
Dom4J生成XML的完整方法希望大家能用到
使用 dom4j 解析 XML dom4j 解析 XML dom4j解析xml
dom4j 输出XML时中文乱码解决 dom4j 输出XML时中文乱码解决
DOM4j操作xml文件DOM4j操作xml文件DOM4j操作xml文件DOM4j操作xml文件DOM4j操作xml文件DOM4j操作xml文件DOM4j操作xml文件DOM4j操作xml文件
XSD使用dom4j校验XML
1、xml文档解析 2、 dom4j解析xml 3、实现xml文件解析 xml字符串解析 xml MAP键值对解析 4、实现xml写入与生成文件
dom4j解析xml实例,dom4j解析xml实例,dom4j解析xml实例,
dom4j解析XML文件格式dom4j解析XML文件格式dom4j解析XML文件格式
Dom4j解析教程。详细讲解如何使用dom4j解析xml,简单易懂。
dom4j读写xmldom4j读写xmldom4j读写xmldom4j读写xmldom4j读写xml
Dom4j解析XML及中文问题Dom4j解析XML及中文问题Dom4j解析XML及中文问题Dom4j解析XML及中文问题Dom4j解析XML及中文问题Dom4j解析XML及中文问题
dom4j解析xml文件的压缩包,完整版。对jdom进行了封装。包含源码,jar包以及所需的全部内容。
该示例实现MAVEN来进行创建的,实现了dom4j操作XML文件,包括创建XML、动态创建XML节点、更新XML节点、删除XML节点。
dom4j是一种解析XML文档的开放源代码XML框架。本文介绍如何使用包含在dom4j中的解析器创建并修改XML文档。dom4j API包含一个解析XML文档的工具。本文中将使用这个解析器创建一个示例XML文档,然后使用同一个解析器...
dom4j解析XML必备jardom4j解析XML必备jardom4j解析XML必备jardom4j解析XML必备jar
利用Dom4j生成XML和解析XML
java dom4j解析xml (详细注释)
完整的讲解一个dom4j对xml的增删改查