xml的读写时的乱码问题

我们在用dom4j的时候很容易出现乱码现象!

我们来分析一下原因:

码表常见的有两只种:1.“GB2312”和2.“UTF-8”

1.我们在写XML的时候会有存储时有一个写入,那么,在写入的时候会对应一种码表!

2.我们再读取的时候也会有着种情况,需要有对应的码表!

所以这样由于码表的不对应就会出现乱码!所以我们有根源入手来改变!

有这样的程序:

//创建一个读取器
			SAXReader reader = new SAXReader();
		//读取一个xml文档
			Document d = reader.read("src/mybook.xml");	
		//获得一个根节点
			Element root = d.getRootElement();
		
			root.addElement("file").addElement("filename").addText("NET文档");
			

			OutputFormat pre = OutputFormat.createPrettyPrint();
			XMLWriter writer = new XMLWriter(new FileWriter("src/mybook.xml"),pre);
			writer.write(root);
			writer.close();
这样由于FileWriter()读取是用的GB2312的码表,而XML文档时“utf-8”所以就出现了乱码!

<?xml version="1.0" encoding="UTf-8"?>
<xml-body> 
  <book> 
    <bookname>英语</bookname>  
    <bookprice>12</bookprice> 
  </book>  
  <book> 
    <bookname>数学</bookname>  
    <bookprice>33</bookprice> 
  </book>  
  <file> 
    <filename>javadoc</filename> 
  </file>  
</xml-body>

我们解决这个问题的通用办法就是:1    改变输出时的码表!2    改变读取的码表

第一种:

首先我们来改变读取的码表:

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

这样用转换流读取时用的就是“Utf-8”了!

第二种:

我们改变输出的码表:也就是XML的码表

我们在读取一个GB2312的xml文档时,要尤其注意:无论你的xml是什么都会按照UTF-8写出!

XMLWriter writer = new XMLWriter(new FileWriter("src/mybook.xml"),pre);
			writer.write(root);
			writer.close();

主要指Document读入后就会成为UTF-8,所以你写出后Filewriter就会是你的xml乱码!

所以原因是你的写入前的文档,我们解决可以用到格式化输出器:

OutputFormat pre = OutputFormat.createPrettyPrint();
			pre.setEncoding("Gb2312");

这样就会输出不是乱码的码表了!

所以我们在写程序是用到的就是统一码表:

1.xml的文档的码表!

2.程序在内存中的码表!

3.你写出去存储的码表!

所以相应的程序设置为:

1.<?xml version ="1.0" encoding="(设置的码表)"?>

2.fomat的相应的setEncoding(设置相应的码表);

3.输出流FileWrier()是GB2312码表,而你可以用装换流改变码表:new OutputStreamWriter(new FileOutputStream("src/mybook.xml"),"GB2312")!

这样我们就解决了xml的乱码问题!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值