完美的解决方法从辟谣开始:
1)JDOM是否生成UTF-8的文件与Format是否设置无关,只有输出其他字符编码才需要设置,见下面的注释。
2)JDOM输出UTF-8文件乱码的根本原因并非在JDOMAPI,而是在JDK。
具体描述:
JDOM的输出类XMLOutputter有两个output接口,除了都具有一个Document参数外,分别接受Writer和 OutputStream参数。
这给我们一个错觉,两个接口可以任意使用。
首先我们用output(doc,System.out)来做测试,此时得到乱码,
然后我们改为output(doc,new PrintWriter(System.out))来测试,输出不是乱码,
也就是说在控制台的时候一定要用一个Writer接口包装一下。
然后我们用output(doc,new FileWriter(path))来做测试,结果却得到乱码,
然后我们改为output(doc,new FileOutputStream(path))来测试,输出不是乱码,
也就是说在输出文件的时候一定要用一个OutputStream接口包装一下。
疯了吧?呵呵,很搞笑是吧。经过到JDOM的源码中调试,发现没有任何问题,问题出在了JDK里面。
JDK内的对应接口处理:
1)PrintWriter类有参数为OutputStream的构造方法,因此可以从System.out包装到PrintWriter
2)FileWriter类没有参数为OutputStream的构造方法,因此不能从FileOutputStream包装到 FileWriter
3)如果PrintWriter类用了参数为Writer的构造方法(Writer实现为FileWriter),最后输出也是乱码
4)如果用一个FileOutputStream来包装一个控制台输出,也是乱码
因此,对于JDK内的各种输出体系,各种InputStream、OutputStream、reader和writer要充分认识,否则极容易出现一些意想不到的问题。
测试的JDOM版本:1.0、1.1
测试代码:
view plaincopy to clipboardprint?
1. import java.io.File;
2.
3. import java.io.FileOutputStream;
4.
5. import java.io.FileWriter;
6.
7. import java.io.PrintWriter;
8.
9. import java.util.HashMap;
10. import org.jdom.Document;
11.
12. import org.jdom.Element;
13.
14. import org.jdom.output.Format;
15.
16. import org.jdom.output.XMLOutputter;
17. public class BuildXML {
18. public static void main(String[] args) throws Exception{
19. File xmlfile=new File("C:\\EditTemp\\xml\\abc.xml");
20. //中文问题 //GBK 是没有问题的,但UTF-8就是有问题的
21.
22. //原因:
23.
24. //1)对于磁盘文件,必须使用输出流 FileOutputStream
25.
26. // FileWriter out=new FileWriter(xmlfile);会导致乱码
27.
28. //2)对于控制台输出,则必须使用PrintWriter,如果直接使用System.out也会出现乱码
29.
30. // PrintWriter out=new PrintWriter(System.out);
31.
32.
33. FileOutputStream out=new FileOutputStream(xmlfile);
34.
35. Element eroot=new Element("root");
36.
37. eroot.addContent((new Element("code")).addContent("代码"));
38.
39. eroot.addContent((new Element("ds")).addContent("数据源"));
40.
41. eroot.addContent((new Element("sql")).addContent("检索sql"));
42.
43. eroot.addContent((new Element("order")).addContent("排序"));
44.
45. Document doc=new Document(eroot);
46.
47. XMLOutputter outputter = new XMLOutputter();
48.
49. //如果不设置 format,仅仅是没有缩进,xml还是utf-8的,因此format不是必要的
50.
51. Format f = Format.getPrettyFormat();
52.
53. //f.setEncoding("UTF-8");//default=UTF-8
54.
55. outputter.setFormat(f);
56. outputter.output(doc, out);
57. out.close();
58.
59. }
60.
61. }
分享到:
相关推荐
5. **输出XML**:通过`XMLOutputter`类将JDOM结构转换回XML字符串或写入到文件。 在`www.pudn.com.txt`文件中,可能包含了一些关于这些JDOM版本的下载信息、教程链接或者使用示例,对于初学者来说是一个很好的参考...
包含翻译后的API文档:jdom-1.1-javadoc-API文档-中文(简体)版.zip 对应Maven信息:groupId:org.jdom,artifactId:jdom,version:1.1 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览...
JDOM是Java中处理XML文档的一个流行库,它提供了一种方便的方式来创建、修改和解析XML文档。然而,JDOM的标准库并不直接支持XPath,XPath是一种强大的语言,用于在XML文档中定位节点。为了在JDOM中利用XPath的功能,...
本示例“jdom-test-1.1.zip”提供了使用JDOM库操作XML的详细教程。 JDOM,全称为Java Document Object Model,是一个专为Java设计的API,用于读写XML文档。它提供了一个直观的、基于树的API,使得开发者能够轻松地...
包含翻译后的API文档:jdom-1.1-javadoc-API文档-中文(简体)-英语-对照版.zip 对应Maven信息:groupId:org.jdom,artifactId:jdom,version:1.1 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件...
JDOM,全称为Java Document ...无论是创建、解析还是修改XML文档,JDOM都能提供高效的解决方案,且具有良好的社区支持和丰富的文档资料。在实际开发中,掌握JDOM能够提升XML处理的效率,使得代码更加简洁和易于维护。
`jdom\DB-xml-out`项目提供了一种解决方案,利用Java的JDOM库将数据库中的数据转换并保存到XML文件中。JDOM是Java中一个用于处理XML的API,它提供了高效、灵活且方便的方式来构建和操作XML文档。 JDOM库的核心概念...
赠送jar包:jdom2-2.0.6.jar; 赠送原API文档:jdom2-2.0.6-javadoc.jar; 赠送源代码:jdom2-2.0.6-sources.jar; 赠送Maven依赖信息文件:jdom2-2.0.6.pom; 包含翻译后的API文档:jdom2-2.0.6-javadoc-API文档-...
jdom-1.0.jar,jdom-1.0.jar,jdom-1.0.jar,jdom-1.0.jar,jdom-1.0.jar
maven-model-jdom-support-3.0.3-sources.jar
Maven依赖:【***.jar Maven依赖信息(可用于项目pom.xml).txt】 Gradle依赖:【***.jar Gradle依赖信息(可用于项目build.gradle).txt】 源代码下载地址:【***-sources.jar下载地址(官方地址+国内镜像地址).txt】...
JDOM-API-DOCS.CHM,不过是一个英文版的.
maven-model-jdom-support-3.0.x-1.1.jar
**JDOM解析XML详解** XML(Extensible Markup Language)是一种用于标记数据的标准化语言,广泛应用于数据交换、配置文件和Web服务等领域。JDOM是Java领域中专门处理XML的一个库,它提供了一种高效且方便的方式来...
jdom.jar jstl.jar log4j-1.2.13.jar ojdbc14._jar standard.jar commons-net-1.4.1.jar xml-apis.jar jdbc2_0-stdext.jar
包含翻译后的API文档:jdom2-2.0.6-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:org.jdom:jdom2:2.0.6; 标签:jdom2、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开...
在处理XML文档时,有多种解析方式,包括DOM、SAX、JDOM和DOM4J。每种解析方式都有其特性和适用场景,下面将详细探讨这四种解析方法。 1. DOM(Document Object Model) DOM解析器将整个XML文档加载到内存中,形成一...
《JDOM 2.0.6:解析与构建XML文档的利器》 JDOM,全称为Java Document Object Model,是一个专为Java设计的XML处理库。JDOM 2.0.6是该库的一个版本,提供了高效且方便的方式来创建、访问和修改XML文档。这个压缩包...
4. **序列化XML**:将JDOM对象模型转换回XML字符串或写入文件,支持格式化输出,如添加换行和缩进。 5. **XPath支持**:JDOM 1.1引入了对XPath的支持,这使得能够通过简洁的表达式快速定位XML文档中的特定节点,...
maven-model-jdom-support-3.0.3.jar