`
yutianc
  • 浏览: 20685 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

[转载] JDom输出UTF-8的XML出现中文乱码完美解决

    博客分类:
  • JDOM
阅读更多
完美的解决方法从辟谣开始:
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. }
分享到:
评论

相关推荐

    jdom-1.1.zip_java jdom_jdom-1.0.jar包_jdom-1.1_jdom-1.1.1.tar.gz

    5. **输出XML**:通过`XMLOutputter`类将JDOM结构转换回XML字符串或写入到文件。 在`www.pudn.com.txt`文件中,可能包含了一些关于这些JDOM版本的下载信息、教程链接或者使用示例,对于初学者来说是一个很好的参考...

    jdom-1.1-API文档-中文版.zip

    包含翻译后的API文档:jdom-1.1-javadoc-API文档-中文(简体)版.zip 对应Maven信息:groupId:org.jdom,artifactId:jdom,version:1.1 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览...

    jdom-contrib-1.0.zjip

    JDOM是Java中处理XML文档的一个流行库,它提供了一种方便的方式来创建、修改和解析XML文档。然而,JDOM的标准库并不直接支持XPath,XPath是一种强大的语言,用于在XML文档中定位节点。为了在JDOM中利用XPath的功能,...

    jdom-test-1.1.zip_Java Test_java 操作xml_jdom_jdom xml_xml java jd

    本示例“jdom-test-1.1.zip”提供了使用JDOM库操作XML的详细教程。 JDOM,全称为Java Document Object Model,是一个专为Java设计的API,用于读写XML文档。它提供了一个直观的、基于树的API,使得开发者能够轻松地...

    jdom-1.1-API文档-中英对照版.zip

    包含翻译后的API文档:jdom-1.1-javadoc-API文档-中文(简体)-英语-对照版.zip 对应Maven信息:groupId:org.jdom,artifactId:jdom,version:1.1 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件...

    jdom-1.1.zip jdom-1.1.jar jdom.jar jdom库 jdom操作xml

    JDOM,全称为Java Document ...无论是创建、解析还是修改XML文档,JDOM都能提供高效的解决方案,且具有良好的社区支持和丰富的文档资料。在实际开发中,掌握JDOM能够提升XML处理的效率,使得代码更加简洁和易于维护。

    jdom\DB-xml-out.通过jdom把数据库中的数据读取到XML文件中

    `jdom\DB-xml-out`项目提供了一种解决方案,利用Java的JDOM库将数据库中的数据转换并保存到XML文件中。JDOM是Java中一个用于处理XML的API,它提供了高效、灵活且方便的方式来构建和操作XML文档。 JDOM库的核心概念...

    jdom2-2.0.6-API文档-中文版.zip

    赠送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,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-model-jdom-support-3.0.3-sources.jar

    jdom2-2.0.6.jar中文-英文对照文档.zip

    Maven依赖:【***.jar Maven依赖信息(可用于项目pom.xml).txt】 Gradle依赖:【***.jar Gradle依赖信息(可用于项目build.gradle).txt】 源代码下载地址:【***-sources.jar下载地址(官方地址+国内镜像地址).txt】...

    JDOM-API-DOCS.CHM

    JDOM-API-DOCS.CHM,不过是一个英文版的.

    maven-model-jdom-support-3.0.x-1.1.jar

    maven-model-jdom-support-3.0.x-1.1.jar

    jdom-1.0,jdom解析xml

    **JDOM解析XML详解** XML(Extensible Markup Language)是一种用于标记数据的标准化语言,广泛应用于数据交换、配置文件和Web服务等领域。JDOM是Java领域中专门处理XML的一个库,它提供了一种高效且方便的方式来...

    jstl.jar-jdom.jar-log4j-1.2.13.jar-ojdbc14._jar-standard.jar-commons-net-1.4.1.jar-xml-apis.jar-jdbc

    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

    jdom2-2.0.6-API文档-中英对照版.zip

    包含翻译后的API文档:jdom2-2.0.6-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:org.jdom:jdom2:2.0.6; 标签:jdom2、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开...

    XML四种解析方式------DOM SAX JDOM DOM4J

    在处理XML文档时,有多种解析方式,包括DOM、SAX、JDOM和DOM4J。每种解析方式都有其特性和适用场景,下面将详细探讨这四种解析方法。 1. DOM(Document Object Model) DOM解析器将整个XML文档加载到内存中,形成一...

    jdom-2.0_6.zip

    《JDOM 2.0.6:解析与构建XML文档的利器》 JDOM,全称为Java Document Object Model,是一个专为Java设计的XML处理库。JDOM 2.0.6是该库的一个版本,提供了高效且方便的方式来创建、访问和修改XML文档。这个压缩包...

    jdom-1.1-all

    4. **序列化XML**:将JDOM对象模型转换回XML字符串或写入文件,支持格式化输出,如添加换行和缩进。 5. **XPath支持**:JDOM 1.1引入了对XPath的支持,这使得能够通过简洁的表达式快速定位XML文档中的特定节点,...

    maven-model-jdom-support-3.0.3.jar

    maven-model-jdom-support-3.0.3.jar

Global site tag (gtag.js) - Google Analytics