Java Web基础入门第六讲 XML语言——DOM4J保存数据的乱码问题

本文探讨了使用DOM4J操作XML文件时可能出现的乱码问题,包括文件头编码格式变化的原因和解决方案。重点讲解了如何通过设置OutputFormat保持XML编码一致性,以及在不同编码环境下使用字节流和字符流的注意事项。
摘要由CSDN通过智能技术生成

问题描述

DOM4J对XML文档进行增删改查后,将内存中的Document对象保存到持久化设备生成XML文件后,XML文件无法正常打开,出现乱码。也有可能会报异常:

Xml:org.dom4j.DocumentException: 2字节的UTF-8序列的2无效

产生乱码原因

  • 表面原因:因为XML文件的真正格式(即XML文件保存在持久化设备上的编码格式)和XML文档声明的encoding属性值不一致;
  • 深层原因:一个没有问题的XML文件(XML文件的真正的编码格式和encoding属性值一致),DOM4J API都可以把这个XML文件正常解析成一个Document对象。不管这个XML文件在读入内存之前是什么编码格式,在内存中形成的Document对象都是UTF-8格式,并且encoding属性值也相应的变成UTF-8。造成XML文件的真正格式和encoding属性值不一致的情况发生在把Document对象写入持久化设备时字符到字节的转换过程或字符流直接存储过程。

乱码原因分析

我试着举例去分析乱码的原因,假设XML文档的编码模式是UTF-8(即encoding=“UTF-8”),比如有这样一个book.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<书架>
	<>
		<书名>Java就业培训教程</书名>
		<作者>张孝祥</作者>
		<售价>109元</售价>
	</>
	<>
		<书名 name="xxxx">JavaScript网页开发</书名>
		<作者>黎活明</作者>
		<售价>28.00元</售价>
	</>
</书架>

当我们在第一本书中添加一个新的售价,比如<售价>209元</售价>。使用DOM4J API将内存中的Document对象写入到XML文件中,代码如下:

package cn.liayun.dom4j;

import java.io.File;
import java.io.FileWriter;

import org.dom4j.Document
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李阿昀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值