我们在用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的乱码问题!