关于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。
一)构造内容是FileWriter时,查看XMLWriter源码:
private OutputFormat
format; //属性
protected Writer writer;
而 OutputFormat类中:
private String encoding
= "UTF-8"; //无参默认编码格式是utf-8
返回XMLWriter源码:
跟踪writeDeclaration();
继续跟踪writer,查看FileWriter源码:
这里调用了父类构造方法,再看父类OutputStreamWriter源码:
StreamEncoder的forOutputStreamWriter:
在看看XMLWriter用FileOutputStream构造时:
跟踪createWriter:
到了
完结。希望我浅显的理解能帮到你。
先谈谈我之前不太清楚的乱码, 在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
OutputStreamWriter我们应该都清楚了,
相关文章推荐
- iOS7之后UIBarButton在导航栏上的过大边距问题解决方案
- wordpress学习
- ubuntu12.04 64bit libncurses5-dev和libncurses5-dev:i386共存性问题讨论
- Regular Expression Matching
- SQL手工注入的学习总结
- 热门的国人开发开源项目
- HDU 5025
- ECMAScript 6新特性
- 大型DELETE(删除大量数据)的一种解决方案
- Linux内核源码分析方法
- A brief CRC tutorial
- open odoo 调试 debug
- [.net 面向对象程序设计进阶] (2) 正则表达式 (一) 快速入门
- rmmod: chdir(/lib/modules): No such file or directory
- 关于 Java 性能监控您不知道的 5 件事,第 1 部分
- Google interview question: countSort questions
- 在 Java SE 6 中监视和诊断性能问题
- Java SE 6 新特性: JMX 与系统管理
- Java基础学习笔记。
- android 子线程真的不能更新ui吗