用java代码写xml文件时,出现中文乱码的解决方法

时间:2021-03-26 10:35:16


                

phoneElement.addAttribute("name", "家庭电话");
emailElement.setText("xxx@163.com");
try {
/**
* 特别注意:

* java中有Writer类继承下来的子类没有提供编码格式处理,所以dom4j也无法岁输出的文件进行正确的格式处理。
* 这时候所保存的文件会以系统的默认编码对文件进行保存,在中文版的window下的java默认编码问GBK,
* 也就是说虽然我们标识了要将XML保存utf-8格式,但实际上文件是以gbk格式来保存的,所以也就是为什么能够使用GBK、
* GB2312编码来生成XMl文件能够正确被解析,而已utf-8格式生成的文件不能被XMl解析器所解析的原因。所以不应该用FileWriter对象来构建xml文档,
*而应该使用FileOutPutStream对象来构建xml文档。

*/
//FileWriter fw = new FileWriter("d:\\user.xml");   //用FileWriter来构建xml文档,虽然说可以构建xml文档,但是乳沟有中文时,会出现乱码,看上面的特别注意;
FileOutputStream fps = new FileOutputStream(new File("d:\\user.xml"));  //用FileOutPutStream对象来构建xml文档
OutputFormat opf = OutputFormat.createPrettyPrint();    //格式化生成的的XML文件
//opf.setEncoding("UTF-8");   //就算是设置了XML文件的编码形式,但是默认的是将文件的保存形式是gbk
//XMLWriter  xw = new XMLWriter(fw,opf);     //创建XMLWritere对象,将构建的xml文档对象和格式化xml文件的参数传入
XMLWriter xw = new XMLWriter(fps, opf);  //创建XMLWriter,将构建xml文档对象fps和格式化xml文档对象opf传入到XMlWriter的构造函数的参数中
xw.write(doc);  //用XMlWriter对象的write()方法将doc对象写入到xml文件中
xw.close();   //关闭XMlWriter对象
} catch (Exception e) {
e.printStackTrace();
}