您的位置:首页 > 其它

关于dom4j中使用FileWriter构造XMLWriter导致生成的xml中文乱码总结。

2015-06-29 03:36 399 查看
本人新手一枚,谈不上总结,只能算是自学过程中对于问题的分析和理解吧。
先谈谈我之前不太清楚的乱码, 在eclipse中,通过 System.out.println(Charset.defaultCharset()); 获取 中文操作系统编码。也就是你的项目下.java文件的编码。快捷键alt+enter。通过字符流生成文件时,若不指定编码,则还是默认当前系统的编码。而假如生成的文件的是其他的编码解释,则出现乱码情况。字节流呢,就是字节不变,读取的什么编码的文件用什么编码格式解释。
返回正题:看到xml编码标签那写的<?xml
version="1.0" encoding="UTF-8"?>这样的格式。细心的人用EditPlus打开,就会发现编码实际上并非utf-8,可能是gbk。
Document d = DocumentHelper.createDocument();
Element e=d.addElement("users");
e.addElement("username").setText("张三");
try {
OutputFormat format=OutputFormat.createPrettyPrint();
format.setEncoding("UTF-8");
XMLWriter out = new XMLWriter(new FileWriter(new File("src/xml/users1.xml")),format);
//      XMLWriter out = new XMLWriter(new FileOutputStream(new File("src/xml/users1.xml")),format);
out.write(d);
out.close();

一)构造内容是FileWriter时,查看XMLWriter源码:
private OutputFormat
format; //属性
protected Writer writer;
public XMLWriter(Writer writer, OutputFormat format) {
this.writer = writer;
this.format = format;    //用于设置xml第一行去了,
namespaceStack.push(Namespace.NO_NAMESPACE);
}

而 OutputFormat类中:
private String encoding
= "UTF-8"; //无参默认编码格式是utf-8
返回XMLWriter源码:

跟踪writeDeclaration();
继续跟踪writer,查看FileWriter源码:
这里调用了父类构造方法,再看父类OutputStreamWriter源码:
StreamEncoder的forOutputStreamWriter:
在看看XMLWriter用FileOutputStream构造时:

跟踪createWriter:

到了
OutputStreamWriter我们应该都清楚了,



完结。希望我浅显的理解能帮到你。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: