JAVA:使用dom4j的XMLWriter写Xml文件时出现乱码问题
原创
©著作权归作者所有:来自51CTO博客作者奋斗咸鱼的原创作品,请联系作者获取转载授权,否则将追究法律责任
问题:
按平常的方法,使用dom4j的XMLWriter写Xml文件时出现了乱码问题
public static boolean xmlWrite(String vpath, String node, String value) {
SAXReader saxReader = new SAXReader();
Document doc;
try {
doc = saxReader.read(new File(vpath));// 加载xml文件
Element boot = doc.getRootElement();// 获取根节点
Element el = getXmlElement(boot, node);
el.setText(value);
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("utf-8"); //按示例的做法使用了FileWriter
XMLWriter xmlWriter = new XMLWriter(new FileWriter(vpath), format);
xmlWriter.write(doc);
xmlWriter.close();
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
写入Xml后文件出现中文乱码问题。
原因:
因为FileWriter无法处理编码,虽然代码中使用format.setEncoding("utf-8"),但只是把文件头指定为utf-8,写入的时候没有真正转码。只有使用OutputStream类的方法(此处使用继承类FileOutputStream)才能转码指定的编码。
解决方案:
将new XMLWriter(new FileWriter(vpath), format)中的FileWriter改为FileOutputStream
修改后的代码如下:
public static boolean xmlWrite(String vpath, String node, String value) {
SAXReader saxReader = new SAXReader();
Document doc;
try {
doc = saxReader.read(new File(vpath));// 加载xml文件
Element boot = doc.getRootElement();// 获取根节点
Element el = getXmlElement(boot, node);
el.setText(value);
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("utf-8"); //FileWriter改为FileOutputStream解决乱码问题
XMLWriter xmlWriter = new XMLWriter(new FileOutputStream(vpath), format);
xmlWriter.write(doc);
xmlWriter.close();
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
运行后,写入的文件正常了。