Dom4j保存数据乱码以及xml文件头编码格式改变的原因和解决方法

dom4j解析xml文档请参考:java解析xml的方式总结

dom4j对xml文档进行增删改查后都要将数据写回原文件,有时会出现乱码。

产生乱码原因:

        此时,不管xml文档的编码格式是什么,读入内存的Document都是UTF-8格式的,如果不设定写回时的编码格式,将按照操作系统的编码格式(gb2312或gbk)写回文件。

        如果 xml文档是UTF-8的,而写回时使用的是gb2312(gbk)编码,当然乱码,这是需要指定写回时的编码格式为UTF-8。

        如果xml文档是gb2312(gbk)的编码格式,指定写回时的编码格式为gb2312(gbk)。

解决方法:

  将文件写回时使用的FileFileWriter()改为其他OutputStream类,如使用OutputStreamWriter。

  具体代码如下:

XMLWriter writer = new XMLWriter(new OutputStreamWriter(new FileOutputStream("src/test.xml"), "UTF-8"));
writer.write(document);
writer.close();

文件头编码格式被改变原因:

  假设此时xml文档的编码格式是gb2312,写回文件的编码格式也是gb2312,那么xml文档就没有乱码了,可是新的问题出来了,文件头的编码格式被改为了UTF-8。这是因为,文档在写回时,文档的头编码格式是根据内存中Document的编码(UTF-8)设定的

 解决方法:

  使用dom4j提供方的输出格式化类OutputFormat

具体代码如下:



OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("gb2312");
XMLWriter writer = new XMLWriter(newOutputStreamWriter(
         newFileOutputStream("src/test.xml"), "gb2312"), format);
writer.write(document);
writer.close();

终极解决方案:

使用下面代码


		OutputFormat format = OutputFormat.createPrettyPrint();
		format.setEncoding("UTF-8");//应和xml文档的编码格式一致
		
		XMLWriter writer = new XMLWriter(new FileOutputStream("src/test.xml"), format);
		writer.write(document);
		writer.close();
format.setEncoding("UTF-8");中的编码应该和你的xml文档的编码格式一致,这样就能保证,既不出现乱码,也不会出现文件头编码格式改变的情况

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值